我正在尝试为矩阵分配一些值。在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.
答案 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;