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