Изменение значений полей структуры! ‹Матлаб›

У меня есть формат файла .mat, который я хочу изменить, чтобы передать его другому программному обеспечению. файл имеет структуру 1x1 (имя: данные) с 4 полями. один из них представляет собой структуру 1x15 (имя: событие) с еще 4 полями. Я хочу изменить эти поля. Например, первое — это «время», которое я пытался изменить по-разному:

data.event.time=[1:15];

и я получаю ошибку:

"Scalar structure required for this assignment"

Также пробовал:

data.event = setfield(data.event,'time',1:15);

и получил:

 "Scalar structure required for this assignment.

Error in setfield (line 33)
    s.(deblank(strField)) = varargin{end};"

Я знаю, что не понимаю механизм структур в Matlab, поэтому мой вопрос может быть глупым, но я использую его во второй раз.


person KnowsNothing    schedule 29.09.2016    source источник
comment
Что это за структура? здесь отсутствует информация. Если вы делаете a.b.c=[1:15], это работает отлично, так что что-то в этой структуре мешает вам сделать это.   -  person Ander Biguri    schedule 29.09.2016
comment
Извините, но что вы имеете в виду под этой структурой? Я имею в виду, какой может быть недостающая информация?   -  person KnowsNothing    schedule 29.09.2016


Ответы (2)


Вы, вероятно, ищете это:

for t=1:15
    data.event(t).time=t;
end

Если у вас есть вектор, который вы хотите присвоить нескольким элементам структуры, цикл — самый простой способ.

К сожалению, не существует хорошего способа напрямую присвоить элементы вектора элементам структуры.

Вероятно, это возможно без цикла, если вы измените свой вектор на массив ячеек, но лично я нахожу это нелогичным.

person Dennis Jaheruddin    schedule 29.09.2016

Как уже предложил Деннис Джахеруддин, вы можете избежать цикла for, преобразовав его в массив ячеек и используя встроенную функцию deal работает следующим образом:

timeCell = num2cell(1:15);
[event.time] = deal(timeCell{:});

Вам нужно преобразовать в массив ячеек, поскольку вы хотите использовать различные элементы вектора в качестве аргументов для функции deal.

person m7913d    schedule 07.05.2017