我需要能够返回维度为LxLxL..xL的矩阵元素的索引[x1 x2 ... xd].维数d是提供给我的函数的变量.矩阵不存在,而是我有一个长度为L ^ d的线性阵列.对于数组中的给定索引i,我想知道矩阵中的等价索引.我已经可以使用一个简单的for循环来做到这一点,但我很想知道我是否可以某种方式使用ind2sub.我遇到的问题是,如果我这样做
x=zeros(1,d)
x=ind2sub(L,i)
Run Code Online (Sandbox Code Playgroud)
x被重新分配一个数字而不是所有下标的数组.有办法做到这一点吗?
我假设"indices [x1 x2 ... xd]"是指等效d维数组的每个维度的下标.
您需要将L和d转换为维度数组,然后从中捕获多个argouts ind2sub.这是一个功能.你可以这样称呼它x = myind2sub(L, d, i).
function out = myind2sub(L, d, ix)
sz = repmat(L, [1 d]); %// dimension array for a d-dimension array L long on each side
c = cell([1 d]); %// dynamically sized varargout
[c{:}] = ind2sub(sz, ix);
out = [c{:}];
Run Code Online (Sandbox Code Playgroud)
但是你也应该问为什么要将它存储在一个线性数组中并计算下标,而不是仅仅将其存储在一个多维数组中.在Matlab中,多维数组存储在连续的内存块中,因此它很有效,您可以使用多维下标或线性索引来索引它.如果你有一个线性数组,只需调用reshape(myarray, sz)将其转换为多维等效数组.