2016-09-29 2 views
0

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

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, поэтому мой вопрос может быть каким-то глупым, но я второй раз его использую.

+0

Что это за структура? здесь отсутствует информация. Если вы выполняете 'a.b.c = [1:15]', он работает отлично, так что это что-то вроде этой структуры, которая блокирует вас от этого. –

+0

Извините, но что вы имеете в виду под «что это за структура». Я имею в виду, что может быть недостающей информацией? – KnowsNothing

ответ

1

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

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

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

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

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

0

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

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

вас need to convert to a cell array, потому что вы хотите использовать другой вектор элементов в качестве аргументов для функции deal.

Смежные вопросы