说,我们有一个结构数组
data = struct('position',[]);
data(1,1).position = 11;
data(1,2).position = 12;
data(2,1).position = 21;
data(2,2).position = 22;
我了解到要从数组中所有结构的字段中获取条目,我们可以使用
>> [data.position]
ans =
11 21 12 22
但是这会连续提供数据。 我们怎样才能在数组的原始形状中获得它,而不在MCode中循环数组?
期望的输出:
position =
11 12
21 22
答案 0 :(得分:3)
使用reshape
。这将把输入矢量/矩阵重构为另一个所需形状的矢量/矩阵。具体来说,您可以将data
的尺寸指定为reshape
以及[data.position]
生成的行向量,并为您重新塑造具有正确尺寸的矢量。
data = struct('position',[]);
data(1,1).position = 11;
data(1,2).position = 12;
data(2,1).position = 21;
data(2,2).position = 22;
position = reshape([data.position], size(data))
position =
11 12
21 22
请注意,元素的形状采用列主格式,因此值按列堆叠。如您所见,前两个元素成为输出矩阵的第一列,而后两个元素成为输出矩阵的第二列。
答案 1 :(得分:2)
如果您正在处理空条目,可以使用struct2cell
将结构数据转换为单元格数组,使我们能够将空条目存储为空单元格 -
data_cell = permute(struct2cell(data),[2 3 1])
out = data_cell(:,:,strcmp(fieldnames(data),'position'))
所以,如果你有(2,2)
缺少这样的东西 -
data = struct('position',[]);
data(1,1).position = 11;
data(1,2).position = 12;
data(2,1).position = 21;
你会 -
out =
[11] [12]
[21] []
基于@ CitizenInsane很好的观察结果,它可能非常接近@rayryeng
's answer,但是处理单元格数组而不是数字数组的是 -
out = reshape({data.position}, size(data))