MATLAB:多维线性索引



我试图将一些值分配给矩阵。在二维或三维的情况下,很容易使用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;

相关内容

  • 没有找到相关文章

最新更新