2014-07-18 37 views
3

我已经一个矢量称为厘米,它不改变检查如果两个向量相等蟒

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]它会跳过操作并返回到循环的开始?谢谢!

回答

4

您可能正在寻找(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()

这产生一个阵列的测试,看两者是否相等,并返回是否结果是所有真:

>>> 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就会失去很多好处。但这是一个单独的问题。