Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab——不带For循环的复制结构阵列_Matlab_For Loop_Matrix_Copy_Structure - Fatal编程技术网

Matlab——不带For循环的复制结构阵列

Matlab——不带For循环的复制结构阵列,matlab,for-loop,matrix,copy,structure,Matlab,For Loop,Matrix,Copy,Structure,我在Matlab中有一个相当简单的问题。我想将结构数组(sumRT.P)的n项复制到矩阵(m)中。在C中,我只使用for循环,如下所示: for i = 1:n m(i) = sumRT(i).P; end 但我打赌有一种更简单的方法可以在Matlab中复制数组(这就是语言的全部要点,对吗?)。我试过这个: m = sumRT(1:n).P; 但这只是将sumRT.p中的第一项复制到m,从而生成一个1 X 1的矩阵。注意,如果我键入sumRT(2).P,例如,我可以看到第二项

我在Matlab中有一个相当简单的问题。我想将结构数组(sumRT.P)的n项复制到矩阵(m)中。在C中,我只使用for循环,如下所示:

for i = 1:n    
    m(i) = sumRT(i).P;
end
但我打赌有一种更简单的方法可以在Matlab中复制数组(这就是语言的全部要点,对吗?)。我试过这个:

m = sumRT(1:n).P;
但这只是将sumRT.p中的第一项复制到m,从而生成一个1 X 1的矩阵。注意,如果我键入sumRT(2).P,例如,我可以看到第二项。对于n以内的任何数字,都相同。为什么这是错误的?我如何修复它?

请尝试以下操作:

m = squeeze(cell2mat(struct2cell(sumRT(1:n))));
这会将结构数组转换为单元数组,然后再转换为(数字)数组,然后通过移除单体维度来压缩它

例如:

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

它取决于结构数组中的数据类型。如果它们是变量类型,或者是不同维度数组中大小相同的变量,则不能将它们放入数组,但可以将它们放入单元格:

m={sumRT(1:n).P}
细胞处理起来很简单,所以这不应该是个大问题

如果它们都是标量数值,则可以创建矩阵:

m=cell2mat({sumRT(1:n).P})

这段代码有以下错误:使用cell2mat时出错(第45行)输入单元格数组的所有内容都必须具有相同的数据类型。因此,我尝试将代码编辑为:m4=squence(cell2mat(struct2cell(sumRT(1:n).P)),并收到此错误消息。对于类型为“double”的输入参数,未定义函数“struct2cell”。您还没有告诉我们
sumRT(1).P
sumRT(2).P
的内容是什么。我假设它们是数字;在这种情况下,我的代码确实有效(参见我的示例),我可以看到您的代码对您的数据有效。但这对我的不起作用。内容是双倍的生成了1x1矩阵,我不得不假设字段内容是标量。下次,请详细说明您的问题!使用您的示例,这是我的问题的解决方案:m=cell2mat({sumRT(1:n).P});实际上,我并不完全清楚某些结构阵列是如何变成细胞的。这给我的生活带来了一些问题。有什么建议吗?我有一本关于Matlab的书,但不是很全面。有好的Matlab“圣经”吗(例如,像Schildt的C手册)?太好了!我的答案中确实把符号弄混了,看来你还是算出了。