4

我有一个包含负数和正数的双精度值数组(例如。-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 中实现这个

4

1 回答 1

3

这是一种方法:

>> 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 的逻辑数组。然后使用DIFFFIND获得逻辑数组从 0 变为 1 或 1 变为 0 的索引。在该数组的前面添加一个零,即长度到A最后,然后再次取差,得到每个正段或负段的大小。最后,您可以使用函数MAT2CELL将数组分解为较小数组的元胞数组。

于 2012-04-12T21:37:15.323 回答