使用过零作为选择边界的子阵列中的分区数组

时间:2017-05-25 19:33:42

标签: numpy multidimensional-array slice

我有一个二维数组,其中一行包含力的测量值,其他行包含其他测量值。

我想要一种方法来获得由subarray = full_array[:,start:end]格式的切片组成的子阵列,其中start和end是过零点。

例如,忽略剩余的行,将提取第一行[-2, -1, 1, 2, 4, -1, -3, 2, 5, 8, 9, -3]的数组,如下所示:

extractions[0] = [1, 2, 4]
extractions[1] = [2, 5, 8, 9]

它在概念上类似于" blob detection",但只是沿着一个轴。

我无法用Numpy或Scipy干净利落地做到这一点。

1 个答案:

答案 0 :(得分:1)

一种方法 -

# Mask of greater than zeros
mask = np.r_[False, arr>0, False]

# Nonzero island start and stop indices
idx = np.flatnonzero(np.diff(mask)).reshape(-1,2)

# Split array based on start, stop indices
out = [arr[i:j] for i,j in idx]

要提高效果,请使用mask[1:] != mask[:-1]代替np.diff(mask)np.concatenate可以替换np.r_

示例运行 -

In [332]: arr
Out[332]: array([-2, -1,  1,  2,  4, -1, -3,  2,  5,  8,  9, -3])

In [333]: out
Out[333]: [array([1, 2, 4]), array([2, 5, 8, 9])]