在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
。
在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
。
我想当MATLAB遇到大括号时,它会尝试将单元阵列的两个元素处理为结构数组的两个元素。考虑
a.b(1:2) = struct('c', {1 2})
这将有2元件单元阵列分配到单个结构域:
struct('c', {{1 2}})
这是因为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,并读取该段“如果值是一个单元阵列...“获取更多信息。
正如其他海报建议,包装它在双大括号作品。为什么?请阅读我刚才指出的文档,然后使用{{1, 2}}
通过它,您会发现它的工作原理与您的想法完全相同。
工程在FreeMat,但并不正确。试过双大括号? 'struct('c',{{1 2}})' –
@ arne.b:谢谢,就是这样!没有真正想到添加双大括号:你可以发表你的评论作为答案,让我可以接受它吗? – HappyPy