我试图从“嵌套”数组中提取特定列,我需要的列是嵌套的,大约有一千列,其中我只需要在数组的另一部分中用索引标记的列。
我有一个包含数值的数组{1,15}(例如2,5,10,53)。这些值是我需要从另一个数组中提取的索引号。
indexnum = OutArray{1,15}(:);
将它们安排在一列而不是一行中,完全没有必要,但我似乎更容易进步。
然后我将数组包含我想要提取/复制到新数组的实际列。
OutArray{1,14}{i,1}
因此,通过上面的示例数字,我需要将第2,5,10和53列复制到另一个数组。
我目前的一个尝试看起来像这样:
NewArray = []; %create new array
indexnum = OutArray{1,15}(:); %copy right index values to column
for i = indexnum{:} %use numeric value of every cell
NewArray = [NewArray, OutArray{1,14}{1,i}] %copy corresponding columns to NewArray
end
我也试过使用cell2mat(indexnum(1,:)),但这也没有帮助。
要明确数组的结构:
对于我需要复制所有列的另一个数组,这段代码工作正常:
new1 = [];
for i = 1:length(OutArray{1,4})
new1 = [new1, OutArray{1,4}{i,1}]
end
答案 0 :(得分:0)
有点难以理解,因为细胞中有如此多的细胞,但你的截图非常有帮助。我将首先强调你的尝试中的错误和需要的变化:
NewArray = []; %create new array
indexnum = OutArray{1,15}(:); %copy right index values to column
for i = indexnum{:} %use numeric value of every cell
NewArray = [NewArray, OutArray{1,14}{1,i}] %copy corresponding columns to NewArray
end
OutArray{1,15}(:)
与OutArray{1,15}
完全相同,因为您只选择完整的单元格。indexnum{:}
作为迭代器,但{:}
返回逗号分隔列表,对于提供完整向量的数组,它不像(:)
那样工作。在这种情况下,当您将indexnum{:}
分配给变量时,只能获得列表的第一个元素。举例说明:C = {1, 2, 3}; C{:}
显示完整列表,但x = C{:}
仅显示x = 1
。要获取所有元素,您可以通过执行以下操作将它们分组到数组中:x = [C{:}]
。
因此,在您的情况下,您只需要在for i = [indexnum{:}]
中添加括号以使迭代器正常工作。总而言之,您的代码将更改为:
NewArray = []; %create new array
indexnum = OutArray{1,15}; %copy right index values to column
for i = [indexnum{:}]
NewArray = [NewArray, OutArray{1,14}{1,i}}];
end
此外,您可以使用以下单行代码避免for循环和变量初始化:
NewArray = [OutArray{1,14}{1,[OutArray{1,15}{1,:}]}];
如您所见,它只需要数据的第1行OutArray{1,14}
以及索引OutArray{1,15}
的每个元素指定的列。括号需要两次,因为当使用带有多个索引的花括号索引单元格时,您总是得到一个列表并需要转换为数组,如上所述。