【问题标题】:How to slice a struct array?如何切片结构数组?
【发布时间】:2012-01-27 16:53:21
【问题描述】:
如何从 Matlab 结构数组的每个元素中提取特定字段?
>> clear x
>> x(1).a = 6;
>> x(2).a = 7;
我想要一个包含 6 和 7 的数组。x(:).a 和 x.a 都不做我想做的事。
>> x(:).a
ans =
6
ans =
7
【问题讨论】:
标签:
arrays
matlab
multidimensional-array
slice
【解决方案1】:
遗憾的是,我几乎可以肯定 MATLAB 没有很好的方法来做你想做的事。您将不得不使用 for 循环来构造一个新数组,或者返回并重新设计您的数据结构。例如,您可以使用 struct-of-arrays 而不是 array-of-structs。
【解决方案2】:
没问题 - 只需使用:
arr = [x.a];
它将连接您需要的所有值。
如果您有更复杂的数据,可以使用花括号:
b(1).x = 'John';
b(2).x = 'Doe';
arr = {b.x};
【解决方案3】:
对于多维数组,你需要
reshape([x.a], size(x))
【解决方案4】:
如果结构的元素是字符串,则可接受的解决方案连接所有单元格。
更一般的
vertcat(x.a)
适用于所有情况。
Ref