如何在Matlab中从n*1结构的特定字段中提取所有值
假设我有一个称为I的结构,大小为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的所有值。。。作为逗号分隔的列表,可插入任何需要此类列表的位置,例如函数参数列表或数组初始化 编辑:如果所有
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};