我试图将一些值分配给矩阵。在二维或三维的情况下,很容易使用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.
用索引值定义vector
x = [1 2 3 4 5];
然后您可以转换为单元格(使用num2cell
),并从中转换为逗号分隔的列表:
xc = num2cell(x);
A(sub2ind(siz, xc{:})) = any_var;
或者您可以直接进行计算并避免sub2ind
。要转换为线性索引,沿着k第一个维度从索引中减去1,然后乘以前面维度大小的累积乘积。所有k加1的和是线性索引:
A(x(1) + sum((x(2:end)-1).*cumprod(siz(1:end-1)))) = any_var;