python 检查两个向量是否相等

Sid*_*ney 4 python numpy

我有一个名为 cm 的向量,它不会改变

cm = np.array([[99,99,0]])
Run Code Online (Sandbox Code Playgroud)

和另一个称为 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
Run Code Online (Sandbox Code Playgroud)

我尝试将第四行更改为

if pt.all == cm.all 
Run Code Online (Sandbox Code Playgroud)

但这会打印所有内容,包括我想跳过的内容,然后如果我将其变成

if pt.all() == cm.all()
Run Code Online (Sandbox Code Playgroud)

那也行不通。无论如何,这两者之间有什么区别?

有谁知道我如何修复它,以便当 pt = [99,99,0] 时它将跳过操作并返回到循环的开头?谢谢!

DSM*_*DSM 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
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)

一个缺点是这会构造一个临时数组,但在实践中这通常不是问题。

旁白:当你用 numpy 数组编写嵌套循环时,你通常会在某个地方犯错误。Python 级别的循环速度很慢,因此您会失去很多numpy从一开始使用时获得的好处。但这是一个单独的问题。