目前我正在使用 numpy.logical_or 和 numpy.logical_and 来检查两个数组的元素是否具有相同的符号。想知道是否已经有 ufunc 或更有效的方法可以实现这一目标。我目前的解决方案在这里
a = np.array([1,-2,5,7,-11,9])
b = np.array([3,-8,4,81,5,16])
out = np.logical_or(
np.logical_and((a < 0),(b < 0)),
np.logical_and((a > 0),(b > 0))
)
编辑// 输出
out
Out[51]: array([ True, True, True, True, False, True], dtype=bool)
最佳答案
一种方法是元素乘积,然后检查 >=0
,因为相同的符号(均为正或均为负)将导致正乘积值 -
((a== b) & (a==0)) | (a*b>0)
另一个带有显式符号检查的 -
np.sign(a) == np.sign(b)
运行时测试-
In [155]: a = np.random.randint(-10,10,(1000000))
In [156]: b = np.random.randint(-10,10,(1000000))
In [157]: np.allclose(np.sign(a) == np.sign(b), ((a== b) & (a==0)) | (a*b>0))
Out[157]: True
In [158]: %timeit np.sign(a) == np.sign(b)
100 loops, best of 3: 3.06 ms per loop
In [159]: %timeit ((a== b) & (a==0)) | (a*b>0)
100 loops, best of 3: 3.54 ms per loop
# @salehinejad's soln
In [160]: %timeit np.where((np.sign(a)+np.sign(b))==0)
100 loops, best of 3: 8.71 ms per loop
关于python - 检查两个数值在 numpy (+/-) 中是否有相同的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380840/