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

Get values in numpy array either side of a specified value

我有一个随机提供的 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] 

理想情况下 return 我会得到 2 和 -2 的值。但是,1 值包含在 b 的切片中,我得到 returned 1 和 -2 的值。

numpy 中有没有一种方法可以立即将值 'next' 检索为零?

值得注意的是,虽然我总是想在 0 处拆分数组,但数组可以是任意长度,并且我可以在数组中有奇数个正值和负值(即 [5, 4, 3, 2, 1, 0, -1])

一个真实世界的例子是:

我想要黄色和绿色的位置,但得到的是 return 蓝色和绿色的位置,因为数据从 -ve 到 +ve

跨越零

这个函数应该可以完成工作:

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)