Вопрос или проблема
Для каждого из 20 опытов у меня есть структура S
, содержащая 50 подполей. Одно из этих подполей, type
, представляет собой структуру 1×50000 с 50 полями. Мне нужно добавить поле condition
в структуру под поля ‘type’, чтобы получить S.type.condition
.
[S.type.condition] = deal(''); % добавляет подполе в S.type
Эти новые подполе необходимо заполнять на основе двух существующих подполей: S.type.pres
(со значениями от 1 до 2) и S.type.stimulus
(со значениями от 1 до 3), так что если
`S.type.stimulus == 1 & S.type.pres == 1` тогда `S.type.condition ==1`
`S.type.stimulus == 2 & S.type.pres == 1` тогда `S.type.condition ==2`
`S.type.stimulus == 3 & S.type.pres == 1` тогда `S.type.condition ==3`
`S.type.stimulus == 1 & S.type.pres == 2` тогда `S.type.condition ==4`
`S.type.stimulus == 2 & S.type.pres == 2` тогда `S.type.condition ==5`
`S.type.stimulus == 3 & S.type.pres == 2` тогда `S.type.condition ==6`
Мне нужно повторить это для каждого из 20 опытов.
Ответ или решение
Для выполнения задачи по заполнению подстепени структуры в MATLAB на основе поставленных условий, вам понадобится эффективно использовать массивы и логические операции. Давайте рассмотрим пошаговое руководство для решения данной проблемы.
Шаг 1: Инициализация структуры
Вначале предполагается, что у вас есть структура S
, содержащая 20 экспериментов (испытаний), и в каждом испытании существует поле type
, которое содержит 50 подполей. Поле type
имеет поля pres
и stimulus
, которые вы будете использовать для определения нового поля condition
.
num_trials = 20;
num_fields = 50;
% Создание структуры S
S(num_trials).type(1:num_fields) = struct('pres', [], 'stimulus', [], 'condition', []);
Шаг 2: Заполнение существующих полей
Предположим, что вы уже заполнили поля pres
и stimulus
для каждого испытания:
for i = 1:num_trials
for j = 1:num_fields
S(i).type(j).pres = randi([1, 2]); % Случайное значение 1 или 2
S(i).type(j).stimulus = randi([1, 3]); % Случайное значение 1, 2 или 3
end
end
Шаг 3: Определение поля condition
Теперь мы можем добавить новое поле condition
в каждую подструктуру type
и заполнять его на основе значений pres
и stimulus
. Это можно сделать, используя простую логическую индексацию и условные операторы.
for i = 1:num_trials
for j = 1:num_fields
if S(i).type(j).pres == 1
if S(i).type(j).stimulus == 1
S(i).type(j).condition = 1;
elseif S(i).type(j).stimulus == 2
S(i).type(j).condition = 2;
elseif S(i).type(j).stimulus == 3
S(i).type(j).condition = 3;
end
elseif S(i).type(j).pres == 2
if S(i).type(j).stimulus == 1
S(i).type(j).condition = 4;
elseif S(i).type(j).stimulus == 2
S(i).type(j).condition = 5;
elseif S(i).type(j).stimulus == 3
S(i).type(j).condition = 6;
end
end
end
end
Шаг 4: Получение результата
Теперь каждая подструктура type
в каждом испытании содержит новое поле condition
, заполненное согласно заданным условиям. Вы можете проверить свои результаты, выводя значения:
for i = 1:num_trials
for j = 1:num_fields
disp(['Trial: ' num2str(i) ', Field: ' num2str(j) ', Condition: ' num2str(S(i).type(j).condition)]);
end
end
Заключение
Этот код иллюстрирует, как можно динамически добавлять и заполнять поля в структурах MATLAB на основе определенных условий. Соответствующее использование циклов и логических операторов обеспечивает гибкость и масштабируемость для работы с большими наборами данных.
Не забудьте протестировать код на небольшом наборе данных перед его применением к полному массиву, чтобы убедиться в его корректности и производительности.