MATLAB:线性索引多维度

时间:2016-10-05 14:01:27

标签: arrays matlab multidimensional-array

我正在尝试为矩阵分配一些值。在2或3维的情况下,很容易使用sub2ind。但是我使用的数据有23个维度。通过一个例子可以更好地解释这种情况。 A是一个维度为3x4x5x6x7的矩阵。我想通过线性索引为A(1,2,3,4,5)分配一些内容。通常情况下,可以使用sub2ind:

A(sub2ind(siz,1,2,3,4,5)) = any_var; 

但是我想要的是为sub2ind输入分配一个数组而不是逗号。在MATLAB中有什么能满足这个要求吗?

A(sub2ind(siz,[1 2 3 4 5])) = any_var; % I want something like this.

1 个答案:

答案 0 :(得分:5)

使用索引值

定义向量
x = [1 2 3 4 5];

然后你可以转换为单元格(使用num2cell)并从那里转换为comma-separated list

xc = num2cell(x);
A(sub2ind(siz, xc{:})) = any_var;

或者您可以直接进行计算并避免sub2ind。要转换为线性索引,请沿着 k -th维度从索引中减去1,然后乘以前面维度的大小的累积乘积。所有 k 加1的总和是线性索引:

A(x(1) + sum((x(2:end)-1).*cumprod(siz(1:end-1)))) = any_var;