2014-02-19 3 views
1

В MATLAB, почему это работает:ошибка при создании структуры

>> a.b(1) = struct('c', [1 2]) 

, но не это ?:

>> a.b(1) = struct('c', {1 2}) 
Subscripted assignment dimension mismatch. 

Есть ли способ обойти это? Я знаю, что могу просто сделать a.b(1).c = {1 2}, но у меня есть другие поля, которые я хочу добавить в a.

+1

Работает в Freemat, но не правильно. Пробовали двойные фигурные скобки? 'struct ('c', {{1 2}})' –

+0

@ arne.b: Спасибо, вот и все! На самом деле не думал о добавлении двойных фигурных скобок: s Не могли бы вы разместить свой комментарий в качестве ответа, пожалуйста, чтобы я мог его принять? – HappyPy

ответ

3

Я думаю, когда MATLAB встречает фигурные скобки, он пытается обработать два элемента массива ячеек двумя элементами массива struct. Рассмотрим

a.b(1:2) = struct('c', {1 2}) 

Это присвоит массив ячеек в 2-элементный к одной структуры поля:

struct('c', {{1 2}}) 
4

Это потому, что struct('c', {1 2})не делать то, что вы (предположительно) думают, что он делает - создание структуры с одним полем, c со значением {1, 2}. Скорее всего, это создание структуры 1х2 массива, чье первое значение (то есть, answer(1).c) является 1, и чье второе значение (то есть, answer(2).c) равен 2.

См http://www.mathworks.com/help/matlab/ref/struct.html и прочитать параграф «Если значение является cell array ... "для получения дополнительной информации.

Как и другие плакаты, обертывая его в double фигурные скобки работают. Зачем? Прочитайте эту документацию, на которую я только что указал вам, и пройдите через нее, используя {{1, 2}}, и вы увидите, что она работает точно так, как вы хотите.

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