numpy:获取每行条件成立的索引

时间:2017-04-20 22:05:14

标签: numpy

我有一个如下数组:

In [70]: x
Out[70]: 
array([[0, 1, 2],
       [3, 4, 5]])

我试图获取条件成立的每行索引,例如x > 1

预期输出类似于([2], [0, 1, 2])

我尝试了numpy.wherenumpy.nonzero,但他们给出了奇怪的结果。

1 个答案:

答案 0 :(得分:0)

一种方法 -

r,c = np.where(x>1)
out = np.split(c, np.flatnonzero(r[1:] > r[:-1])+1)

示例运行 -

In [140]: x
Out[140]: 
array([[0, 2, 0, 1, 1],
       [2, 2, 1, 2, 0],
       [0, 2, 1, 1, 0],
       [1, 0, 0, 2, 2]])

In [141]: r,c = np.where(x>1)

In [142]: np.split(c, np.flatnonzero(r[1:] > r[:-1])+1)
Out[142]: [array([1]), array([0, 1, 3]), array([1]), array([3, 4])]

或者,我们可以在最后一步使用np.unique,如此 -

np.split(c, np.unique(r, return_index=1)[1][1:])