1

我正在处理一个类似于以下示例中的“MyCellArray”的 Matlab 数据结构:

% Create a Struct of string values inside a Cell Array
myCellArray = cell(3,1)
myStruct1 = struct('valA','aaa111','valB','bbb111','valC','ccc111')
myStruct2 = struct('valA','aaa222','valB','bbb222','valC','ccc222')
myStruct3 = struct('valA','aaa333','valB','bbb333','valC','ccc333')
myCellArray{1} = myStruct1
myCellArray{2} = myStruct2
myCellArray{3} = myStruct3

我希望能够有效地将一些数据提取到一个新数组中:

% Extract all valA values from myCellArray    
% ArrayOfValA = myCellArray(< somehow get all the valA values >)
DesiredResult = cellstr(['aaa111';'aaa222';'aaa333']) % Or something similar

我是 Matlab 的新手,我无法理解这个符号。我试过这样的事情:

ArrayOfValA = myCellArray{(:,1).valA} % This is incorrect notation!

真实数据超过 500K 行,所以我想尽可能避免 for 循环或其他迭代函数。不幸的是,我无法更改原始数据结构,但我想我可以复制并操作它(我尝试使用 struct2cell 但我又陷入了另一个混乱!)。是否有可能以快速有效的方式做到这一点?非常感谢。

4

2 回答 2

0

以下似乎适用于 Octave。我假设它也适用于 MATLAB:

>> temp = {[myCellArray{:}].valA}
temp =
{
  [1,1] = aaa111
  [1,2] = aaa222
  [1,3] = aaa333
}
于 2013-10-10T12:58:29.080 回答
0

myCellAsMat = cell2mat(myCellArray);
ArrayOfValA = vertcat(myCellAsMat(:).valA); 

工作?

编辑:或 horzcat,具体取决于 valA 字段的尺寸和所需输出。

于 2014-03-15T20:16:34.203 回答