通过索引单元格编号复制数组



我正在尝试从"嵌套"数组中提取特定的列,我需要的列是嵌套的,大约有一千列,我只需要由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
  1. 进行OutArray{1,15}(:)OutArray{1,15}完全相同,与您仅选择单元格的完整单元格。
  2. 您的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}元素指定的列。需要两次托架,因为当用一个以上的索引索引一个卷曲括号时,您始终会获取列表,并且需要如上所述转换为数组。

最新更新