我有一个包含负数和正数的双精度值数组(例如。-2.5 -4 -6 0 1 -2.4 3 7.1 5 -1
)。我想将其排序为较小的连续正数和负数
数组,因此从上面的数组中,id 喜欢创建[-2.5 -4 -6 ] [1] [-2.4] [3 7.1 5] [-1]
.
我如何在 Matlab 中实现这个
这是一种方法:
>> A = [-2.5 -4 -6 0 1 -2.4 3 7.1 5 -1];
>> cellSizes = diff([0 find(diff(A >= 0)) numel(A)]);
>> B = mat2cell(A, 1, cellSizes)
B =
[1x3 double] [1x2 double] [-2.4000] [1x3 double] [-1]
您首先获得一个A
大于或等于 0 的逻辑数组。然后使用DIFF和FIND获得逻辑数组从 0 变为 1 或 1 变为 0 的索引。在该数组的前面添加一个零,即长度到A
最后,然后再次取差,得到每个正段或负段的大小。最后,您可以使用函数MAT2CELL将数组分解为较小数组的元胞数组。