将值添加到由数组指定的单元格元素

时间:2014-08-19 09:19:17

标签: matlab vectorization

我正在寻找一个矢量化解决方案!

我有两个数组:

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等于我的循环索引,但我正在寻找一个矢量化解决方案。原因是,我试图将问题的循环解决方案更改为矢量化解决方案,但我被困在这里

2 个答案:

答案 0 :(得分:7)

使用accumarray

 out = accumarray(idx(:),val(:),[],@(x){x},{});

答案 1 :(得分:4)

mat2cell(val,1,diff([0,find(diff(idx)),numel(idx)]))

也许有人发现摆脱find的可能性,然后它可能会更快。