MATLAB:线性索引多维度

toy*_*lıç 2 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; 
Run Code Online (Sandbox Code Playgroud)

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

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

Lui*_*ndo 5

使用索引值定义向量

x = [1 2 3 4 5];
Run Code Online (Sandbox Code Playgroud)

然后你可以转换为单元格(使用num2cell)并从中转换为以逗号分隔的列表:

xc = num2cell(x);
A(sub2ind(siz, xc{:})) = any_var;
Run Code Online (Sandbox Code Playgroud)

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

A(x(1) + sum((x(2:end)-1).*cumprod(siz(1:end-1)))) = any_var;
Run Code Online (Sandbox Code Playgroud)