python - 检查两个数值在 numpy (+/-) 中是否有相同的符号

标签 python numpy

目前我正在使用 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/

相关文章:

python - 如果在另一个列表中,则从列表中删除项目(列表的列表)

python - 如何使用for进入python循环

python - 删除 Python 列表元素

python - 尝试在 Python 中插入直方图函数的输出

python - 使用 numpy 将数据集分割成成比例的子集

python - 如何将缩放比例放在三元图中的刻度上而不是 x 和 y 轴上

python - 对数据帧进行切片并根据不同切片添加值

python - 在 ubuntu 中安装 python 3.4 的 numpy

python - numpy View 如何知道它引用的值在原始 numpy 数组中的位置?

python - 如何在不复制的情况下从单个 1D Numpy 数组构造 Pandas DataFrame