非零函数帮助,Python Numpy

1 投票
2 回答
2334 浏览
提问于 2025-04-16 22:31

我有两个数组,想要根据一个复杂的条件来处理它们,条件是:new_arr<0 and old_arr>0。我在使用非零(nonzero)的时候遇到了错误。我的代码是这样的:

    indices = nonzero(new_arr<0 and old_arr>0)

我尝试过:

    indices = nonzero(new_arr<0) and nonzero(old_arr>0)

但是结果不对。

有没有什么办法解决这个问题?还有没有办法从两个非零的结果中找出共同的索引?比如,如果:

    indices1 = nonzero(new_arr<0)
    indices2 = nonzero(old_arr>0)

这两个索引会包含:

   indices1 = array([0, 1, 3])
   indices2 = array([2, 3, 4])

正确的结果应该是从这两个中找出共同的元素(在这个例子中就是元素3)。类似这样的:

    result = common(indices1, indices2)

2 个回答

2

试试这个

indices = nonzero(logical_and(new < 0, old > 0))

(想想看,我之前的例子其实没什么用,因为它只是返回了 nonzero(condition) 这个结果。)

5

试试这个代码:indices = nonzero((new_arr < 0) & (old_arr > 0))

In [5]: import numpy as np

In [6]: old_arr = np.array([ 0,-1, 0,-1, 1, 1, 0, 1])

In [7]: new_arr = np.array([ 1, 1,-1,-1,-1,-1, 1, 1])

In [8]: np.nonzero((new_arr < 0) & (old_arr > 0))
Out[8]: (array([4, 5]),)

撰写回答