2016-05-12 14 views
3

我正在尋找一種有效的方式把矢量:打開一個向量的索引到它的內容,反之亦然

[1,1,1,2,3,3,3,4,4,4,5,1] 

爲載體的載體,使得:

[[1,2,3,12],[4],[5,6,7],[8,9,10],[11]] 

一般:

newVector[i] = indexes of the initial vector that contained i 

最好在Matlab /八度,但我只是好奇,如果有一個有效的方式來實現這一點。

我試着在谷歌和堆棧上查找它,但我不知道該怎麼稱呼'操作',所以沒有出現。

+3

證明您已通過使用for循環編寫代碼給出了一個嘗試 – Dan

+1

你能保證所有的值都是從1:n嗎?或者原始矢量是否可以是[1 2 10 2]? –

+0

我願意接受空載體 – mjgalindo

回答

5

有一個簡單的方法使用accumarray

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

但下一次做到這一點,請出示你自己嘗試在你的問題

或者(但只有在1A開始,不跳過任何數字)

accumarray(A', (1:size(A,2))', [], @(x){sort(x)}) 
+0

謝謝。你是對的,我應該發佈一些代碼,但我是matlab新手,當時想不到一種方法。 – mjgalindo

相關問題