将矢量索引转换为其内容,反之亦然

mjg*_*ndo 3 indexing matlab vector octave

我正在寻找一种转换矢量的有效方法:

[1,1,1,2,3,3,3,4,4,4,5,1]
Run Code Online (Sandbox Code Playgroud)

进入矢量矢量,使得:

[[1,2,3,12],[4],[5,6,7],[8,9,10],[11]]
Run Code Online (Sandbox Code Playgroud)

一般来说:

newVector[i] = indexes of the initial vector that contained i
Run Code Online (Sandbox Code Playgroud)

最好是在Matlab/Octave中,但我很好奇是否有一种有效的方法来实现这一点.

我尝试在谷歌和堆栈上查找它,但我不知道该怎么称呼这个'操作'所以没有出现.

Dan*_*Dan 5

有一种简单的方法可以使用它 accumarray

A = [1,1,1,2,3,3,3,4,4,4,5,1]
accumarray(A',A',[],@(x){find(ismember(A,x))})
Run Code Online (Sandbox Code Playgroud)

但下次,请在您的问题中展示自己的尝试

或者(但仅限A于从1任何数字开始并且不跳过任何数字)

accumarray(A', (1:size(A,2))', [], @(x){sort(x)})
Run Code Online (Sandbox Code Playgroud)