我在Matlab中有一个相当简单的问题。我想将n项结构数组(sumRT.P)复制到矩阵(m)。在C中,我只使用for循环,如下所示:
for i = 1:n
m(i) = sumRT(i).P;
end
但我敢打赌,在Matlab中复制数组有一种更简单的方法(这就是语言的全部意义吗?)。我试过这个:
m = sumRT(1:n).P;
但这只是将sumRT.P中的第一项复制到m,从而产生1×1矩阵。注意,如果我键入sumRT(2).P,例如,我可以看到第二项。对于任何最多n的数字都相同。为什么这是错的,我该如何解决?
答案 0 :(得分:2)
这取决于结构数组中的数据类型。如果它们是变量的类型,或者它们是不同维度的数组中相同大小的变量,那么您不能将它们放入数组中,但是您可以将它们放入单元格中:
m={sumRT(1:n).P}
和细胞处理非常简单,所以这不是一个大问题。
如果它们都是标量数值,则可以创建矩阵:
m=cell2mat({sumRT(1:n).P})
答案 1 :(得分:0)
尝试以下方法:
m = squeeze(cell2mat(struct2cell(sumRT(1:n))));
这会将struct数组转换为单元数组,然后转换为(数字)数组,然后通过移除单个维度来压缩它。
示例:
>> sumRT(1).P = 10; sumRT(2).P = 20; sumRT(3).P = 30;
>> n = 2; %// copy first two elements only
>> m = squeeze(cell2mat(struct2cell(sumRT(1:n))))
m =
10
20