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