在Matlab中引用Cell数组中的Structs

时间:2013-10-10 12:41:07

标签: arrays matlab cell-array

我正在处理一个与以下示例中的“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,但我刚刚陷入另一个混乱!)。是否可以快速有效地完成这项工作? 非常感谢。

2 个答案:

答案 0 :(得分:0)

以下似乎适用于Octave。我认为它也适用于MATLAB:

>> temp = {[myCellArray{:}].valA}
temp =
{
  [1,1] = aaa111
  [1,2] = aaa222
  [1,3] = aaa333
}

答案 1 :(得分:0)

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

工作?

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