Arrays MATLAB:多维线性索引

Arrays MATLAB:多维线性索引,arrays,matlab,multidimensional-array,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]))

我试图给矩阵赋值。在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.

使用索引值定义向量

x = [1 2 3 4 5];
然后可以转换为单元格(使用),并从该单元格转换为:

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

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

速度快吗?(第二种解决方案)
cumprod
的想法对我来说很合适。我使用了相同的策略将2D数组的行折叠为标量,每个行都给出一个1D数组,这样,当映射到n-dim网格时,假设每行表示线性索引等价物,其中
n
是col的数量。因此,在NumPy中,这将成为一个疯狂的单行程序:
a.dot(np.append((a.max(0)+1)[:0:-1].cumprod()[::-1],1))
!那个索引部分
[:0:-1]
我还以为是病了;)
A(x(1) + sum((x(2:end)-1).*cumprod(siz(1:end-1)))) = any_var;