我正在尝试从"嵌套"数组中提取特定的列,我需要的列是嵌套的,大约有一千列,我只需要由index标记的列数组的另一部分。
我有一个阵列{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,:)),但这也无济于事。
清除数组的结构:
- erarray {1,15}包含每个列1个值的单元格,这是其他数组的索引号
- 户外{1,14}包含嵌套的单元格,每列1个单元格
- outarray {1,14} {1,x}包含每列〜30个值的列,我想用右索引复制列
对于另一个数组,我只需要复制所有列,此代码正常工作:
new1 = [];
for i = 1:length(OutArray{1,4})
new1 = [new1, OutArray{1,4}{i,1}]
end
这有点难以理解,因为有很多细胞进入单元格,但是您的屏幕截图非常有帮助。我将首先突出显示您的错误,需要更改:
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}
完全相同,与您仅选择单元格的完整单元格。 - 您的for循环使用
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,:}]}];
如您所见,它仅将数据OutArray{1,14}
的第1行和索引OutArray{1,15}
元素指定的列。需要两次托架,因为当用一个以上的索引索引一个卷曲括号时,您始终会获取列表,并且需要如上所述转换为数组。