Matlab - 没有For循环的复制结构数组

时间:2014-10-26 18:30:13

标签: matlab for-loop matrix copy structure

我在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的数字都相同。为什么这是错的,我该如何解决?

2 个答案:

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