2014-02-19 50 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:谢谢,就是这样!没有真正想到添加双大括号:你可以发表你的评论作为答案,让我可以接受它吗? – HappyPy

回答

3

我想当MATLAB遇到大括号时,它会尝试将单元阵列的两个元素处理为结构数组的两个元素。考虑

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,并读取该段“如果值是一个单元阵列...“获取更多信息。

正如其他海报建议,包装它在大括号作品。为什么?请阅读我刚才指出的文档,然后使用{{1, 2}}通过它,您会发现它的工作原理与您的想法完全相同。