我有一个随机提供的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])
现实世界的例子是:
我想要黄色和绿色位置,但是返回蓝色和绿色位置,因为数据从-ve到+ ve越过零回到
答案 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)