来自相应形状的数组结构的数据
Data from array struct in corresponding shape
比如说,我们有一个结构数组
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
使用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
请注意,元素采用列优先格式,因此值按列堆叠。可以看到,前两个元素成为输出矩阵的第一列,而最后两个元素成为输出矩阵的第二列。
如果您正在处理空条目,您可以使用 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 的精彩观察,它可能非常接近 ,但是处理元胞数组而不是数值数组的是 -
out = reshape({data.position}, size(data))
比如说,我们有一个结构数组
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
使用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
请注意,元素采用列优先格式,因此值按列堆叠。可以看到,前两个元素成为输出矩阵的第一列,而最后两个元素成为输出矩阵的第二列。
如果您正在处理空条目,您可以使用 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 的精彩观察,它可能非常接近
out = reshape({data.position}, size(data))