我正在寻找一个矢量化解决方案!
我有两个数组:
idx=[1 1 1 2 2 3 3 4 4 4 5 5 6 7 8 8 8 9 9]; %%//Integers,sorted
val=[1 4 8 2 5 3 9 1 4 8 2 5 6 7 1 4 8 3 9]; %%//respective Values (could be anything)
现在我想创建一个单元格数组,其中包含由idx
指定的元素val
的相应值。因此,结果应为[9x1] cell
,其中包含:
[1 4 8]
[2 5]
[3 9]
[1 4 8]
[2 5]
[6]
[7]
[1 4 8]
[3 9]
我知道我可以将值从1循环到9并使用horzcat,而idx等于我的循环索引,但我正在寻找一个矢量化解决方案。原因是,我试图将问题的循环解决方案更改为矢量化解决方案,但我被困在这里
答案 0 :(得分:7)
使用accumarray
:
out = accumarray(idx(:),val(:),[],@(x){x},{});
答案 1 :(得分:4)
mat2cell(val,1,diff([0,find(diff(idx)),numel(idx)]))
也许有人发现摆脱find
的可能性,然后它可能会更快。