检查两个向量是否相等 Python
我有一个叫做 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
的很多好处。不过这是另一个话题。