我需要能够返回维度为LxLxL..xL的矩阵元素的索引[x1 x2 ... xd]。维数d是提供给我的函数的变量。矩阵不存在,而是我有一个长度为L ^ d的线性阵列。对于数组中的给定索引i,我想知道矩阵中的等价索引。我已经可以使用一个简单的for循环来做到这一点,但我很想知道我是否可以某种方式使用ind2sub。我遇到的问题是,如果我这样做
x=zeros(1,d)
x=ind2sub(L,i)
x被重新分配一个数字,而不是所有下标的数组。有没有办法做到这一点?
答案 0 :(得分:7)
我假设“indices [x1 x2 ... xd]”是指等效d维数组的每个维度的下标。
您需要将L和d转换为维度数组,然后从ind2sub
捕获多个argouts。这是一个功能。您可以将其称为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{:}];
但你也应该问为什么要将它存储在一个线性数组中并计算下标,而不是仅仅将其存储在一个多维数组中。在Matlab中,多维数组存储在连续的内存块中,因此它是有效的,您可以使用多维下标或线性索引来索引它。如果你有一个线性数组,只需调用reshape(myarray, sz)
将其转换为多维等效数据。