当数组的维度动态变化时,如何通过另一个向量中给出的索引访问多维数组?

时间:2016-01-08 08:57:07

标签: arrays matlab multidimensional-array

我有一个多维数组Data和一个1xn向量Location,其元素对应于我希望在数组Data内访问的特定点的索引。 因此,向量Location中的元素数总是等于多维数组Data的维数。 (If length(Location) = n, then dim(Data)=n)。

例如,如果Location = [4 0 9 3],那么我尝试在Data中访问的内容将是:result = Data(4,0,9,3)

如果Data的维度是固定的,我可以简单地做(如果是n=4):

result = Data(Location(1,1), Location(1,2), Location(1,3), Location(1,4));

但是,在我的问题中,Data的维度(以及Location的长度)会发生变化。 这使得访问Data更复杂,我有点迷失,以便如何做到这一点。

如何确定我尝试访问的Data中的点?

如果可能的话,我更喜欢不使用任何循环的解决方案,但这可能是不可能的,所以如果您有基于循环的解决方案,请提出建议!

1 个答案:

答案 0 :(得分:3)

使Data = [1, 2; 3, 4]; Location = {1, 2}; Data(Location{:}) 成为一个单元格数组,对于您的问题的评论中给出的示例:

ans = 2

哪个给出了

Location

根据@BillBokeey的评论进行编辑:

num2cell定义为上面的单元格数组,或使用Location将行向量Data = [1, 2; 3, 4]; Location = [1, 2]; Location_cell = num2cell(Location); Data(Location_cell{:}) 转换为单元格数组,例如:

defaultACL.publicReadAccess = true