Как заполнить подполе на основе условий в Matlab

Вопрос или проблема

Для каждого из 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 на основе определенных условий. Соответствующее использование циклов и логических операторов обеспечивает гибкость и масштабируемость для работы с большими наборами данных.

Не забудьте протестировать код на небольшом наборе данных перед его применением к полному массиву, чтобы убедиться в его корректности и производительности.

Оцените материал
Добавить комментарий

Капча загружается...