在Matlab中从数组中提取数字块

时间:2016-08-16 03:35:53

标签: arrays matlab vector cell-array

我有一个向量,我想从中提取所有块:

x = [1 1 1 4 4 5 5 4 6 1 2 4 4 4 9 8 4 4 4 4]

这样我将得到载体或包含块的单元格:

[1 1 1], [4 4], [5 5], [4], [6], [1], [2], [4 4 4], [9], [8], [4 4 4 4]

有没有一种有效的方法可以在不使用for循环的情况下完成它?谢谢!

1 个答案:

答案 0 :(得分:0)

对于循环aint你可能认为的速度很慢,尤其是在最近的Matlab版本中,尤其是在我们的情况下。也许这会有所帮助

x = [1 1 1 4 4 5 5 4 6 1 2 4 4 4 9 8 4 4 4 4];

breakIdx = [0, find(diff(x)), length(x)];
groups = mat2cell(x,1,diff(breakIdx));

我们通过应用diff(x)找到这些群组,然后我们获得了find()的群组索引。然后,只需将组移动到结果单元格groups中即可。

此处的边缘案例检查非常少,所以我建议您添加它。