检查两个向量是否相等 Python

4 投票
1 回答
11836 浏览
提问于 2025-04-18 13:54

我有一个叫做 cm 的向量,它的值是固定的,不会改变。

cm = np.array([[99,99,0]])

还有一个叫做 pt 的向量,我想在某些值上进行循环。但是当这两个向量的值相等时,我希望跳过这个操作。为了简单起见,我在这里只是让它打印出 pt 的值,但实际上我还有很多其他操作要执行。以下是我的代码:

for i in range (95,103): 
    for j in range (95,103):
        pt = np.array([[i,j,0]])
        if pt == cm:
            continue
        print pt

我试着把第四行改成:

if pt.all == cm.all 

但是这样会打印出所有的值,包括我想跳过的那个。

然后如果我把它改成:

if pt.all() == cm.all()

那样也不行。这两者之间有什么区别呢?

有没有人知道我该怎么做才能让当 pt = [99,99,0] 时跳过操作,直接回到循环的开头?谢谢!

1 个回答

5

你可能想用 (pt == cm).all() 来检查,不过如果涉及到浮点数,使用 np.allclose(pt, cm) 可能更好,因为这样可以避免数值计算中的误差。

(1) pt.all == cm.all

这个是用来检查两个 方法 是否相等:

>>> pt.all
<built-in method all of numpy.ndarray object at 0x16cbbe0>
>>> pt.all == cm.all
False

(2) pt.all() == cm.all()

这个是用来检查每个方法的 all 结果是否相同。例如:

>>> pt
array([[99, 99,  0]])
>>> pt.all()
False
>>> cm = np.array([10, 10, 0])
>>> cm.all()
False
>>> pt.all() == cm.all()
True

(3) (pt == cm).all()

这个会创建一个数组,测试两个是否相等,并返回结果是否全是 True:

>>> pt
array([[99, 99,  0]])
>>> cm
array([[99, 99,  0]])
>>> pt == cm
array([[ True,  True,  True]], dtype=bool)
>>> (pt == cm).all()
True

一个缺点是这个方法会构建一个临时数组,但在实际使用中,这通常不是个大问题。

顺便说一下,当你在用 numpy 数组写嵌套循环时,通常说明你在某个地方犯了错误。Python 的循环比较慢,这样会失去使用 numpy 的很多好处。不过这是另一个话题。

撰写回答