获取指定值任一侧的numpy数组中的值

时间:2016-06-28 00:16:09

标签: python arrays numpy slice

我有一个随机提供的numpy数组,对于这个例子看起来像:

a = [10, 8, 6, 4, 2, -2, -4, -6, -8, -10, 1]

理想情况下,在此示例中,值介于-10和10之间,但无法保证(如上所述)。

我想要检索最接近零的2个值,例如:

b = a[a > 0][-1] 

c = a[a < 0][0] 

理想情况下会返回2和-2的值。但是,1值包含在b中的切片中,并返回值1和-2。

numpy中有没有办法立即“接下来”检索值?

值得注意的是,虽然我总是希望将数组拆分为0,但数组可以是任意长度,并且数组中的正负值数量可能不均匀(即[5,4,3,2, 1,0,-1])

现实世界的例子是:

enter image description here

我想要黄色和绿色位置,但是返回蓝色和绿色位置,因为数据从-ve到+ ve越过零回到

1 个答案:

答案 0 :(得分:2)

此功能应该完成这项工作:

import numpy as np
def my_func(x):
    left = np.where(x[:-1]>0)[0][-1]
    right = 1 + np.where(x[1:]<0)[0][0]
    return x[left], x[right]

演示:

>>> a = np.array([10, 8, 6, 4, 2, -2, -4, -6, -8, -10, 1])
>>> b = np.array([5, 4, 3, 2, 1, 0, -1])
>>> my_func(a)
(2, -2)
>>> my_func(b)
(1, -1)