创建结构时出错

时间:2014-02-19 18:47:51

标签: matlab structure

在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

2 个答案:

答案 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}})