如何在Matlab中从列结构数组中创建列单元数组?

时间:2016-02-22 11:19:41

标签: matlab struct cell-array

假设我使用

获取目录列表
files = dir(mypattern);

现在我在files中有10000x1结构。

如果我这样做

filenames = {files.name};

我将在filenames中拥有1x10000单元格。

即。转置方向。

如何在此处一步从files获取10000x1单元格?

3 个答案:

答案 0 :(得分:3)

怎么样

filenames = {files.name}.';

答案 1 :(得分:2)

只是为了解释发生了什么。 files.nameComma-Separated List,其行为类似{files(1).name,files(2).name,files(3).name}(简化为三个元素),因为它用逗号分隔,而不是用分号分隔。没有分号分隔列表或类似名称,您必须转置或重塑以获得所需的尺寸。

对于向量,Shai的解决方案是完美的,reshape是一个简单的解决方案,也适用于更多维度的数据结构:

files=struct('names',{'a','b';'c','d'}); %example data 2x2
reshape({files.names},size(files));

答案 2 :(得分:0)

另一种方法是:

filenames = arrayfun(@(x) x.name, dir(mypattern), 'uni',0);