Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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中从n*1结构的特定字段中提取所有值_Matlab_Structure_Matlab Struct - Fatal编程技术网

如何在Matlab中从n*1结构的特定字段中提取所有值

如何在Matlab中从n*1结构的特定字段中提取所有值,matlab,structure,matlab-struct,Matlab,Structure,Matlab Struct,假设我有一个称为I的结构,大小为n*1,有多个字段,例如其中一个字段称为“区域”。当我尝试以下代码时: area = I.area 结果区域仅具有来自结构最后位置的一个值。是否有任何快速方法可以精确计算字段中的所有值,但使用for循环除外,如下所示: for ii = 1:n; area(ii) = I(ii).area; end I.area返回I(1).area,I(2).area的所有值。。。作为逗号分隔的列表,可插入任何需要此类列表的位置,例如函数参数列表或数组初始化 编辑:如果所有

假设我有一个称为I的结构,大小为n*1,有多个字段,例如其中一个字段称为“区域”。当我尝试以下代码时:

area = I.area
结果区域仅具有来自结构最后位置的一个值。是否有任何快速方法可以精确计算字段中的所有值,但使用for循环除外,如下所示:

for ii = 1:n; area(ii) = I(ii).area; end
I.area
返回
I(1).area
I(2).area
的所有值。。。作为逗号分隔的列表,可插入任何需要此类列表的位置,例如函数参数列表或数组初始化

编辑:如果所有
I(I).area
是大小相等的行向量。然后,您可以首先水平连接所有尺寸标注,然后重塑为所需尺寸标注:

area =  reshape([I.area], [2 length(I)])'
结果:

>> I.area

ans =

     3     4


ans =

     5     6


ans =

     7     8

>> reshape([I.area], [2 length(I)])'

ans =

     3     4
     5     6
     7     8

在结构周围使用简单的
[]
将导致所有值的水平连接。如果您想将它们沿另一个维度连接起来,可以使用
cat
来明确指定这一点。这将允许您更好地处理可能包含多个值的字段

% Concatenate them along the first dimension
out = cat(1, I.area);

% Concatenate them along the third dimension
out = cat(2, I.area);
或者,如果字段都是不同的维度,则将其转换为
单元格

out = {I.area};

如果区域字段在每个位置都有一个值,例如I(1)。区域=1。如果条目有两个值I(1)。区域=[1,2]?是否可以提取这些值,就像它们被构造为矩阵而不是形成列或行一样。例如:如果I(1).area=[1,2],I(2).area=[3,4],我希望输出是[1,2;3,4]。如果您打算解决
area
是2x1向量的情况,请下次在问题中明确说明,这样回答者就不必猜测您的真正意思。这条线<代码>面积(ii)=I(ii).面积强烈建议
I.area
是一个标量,无论如何,向量
area
可以通过
重塑
轻松处理。我编辑了我的答案以反映这一点。谢谢你的回答!!
out = {I.area};