在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
。
答案 0 :(得分:4)
这是因为struct('c', {1 2})
不是做你(大概)认为它做的事情 - 用一个字段c
创建一个结构{1, 2}
的结构。相反,它创建了一个1x2结构数组,其第一个值(即answer(1).c
)为1,其第二个值(即answer(2).c
)为2。
请参阅http://www.mathworks.com/help/matlab/ref/struct.html,并阅读“如果值是单元格数组...”这一段,以获取更多信息。
正如其他海报所建议的那样,将它包装在 double 花括号中是有效的。为什么?阅读我刚刚指出的文档,并使用{{1, 2}}
完成它,您将看到它完全符合您的要求。
答案 1 :(得分:3)
我猜当MATLAB遇到大括号时,它会尝试将单元格数组的两个元素处理为struct数组的两个元素。考虑
a.b(1:2) = struct('c', {1 2})
这会将一个2元素的单元格数组分配给单个结构字段:
struct('c', {{1 2}})