来自相应形状的数组结构的数据

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