我有一个名为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
我尝试将第4行更改为
if pt.all == cm.all
但打印所有内容,包括我想跳过的内容 如果我把它变成
if pt.all() == cm.all()
这也不起作用。这两者之间有什么区别?
有没有人知道我怎么能修复它,所以当pt = [99,99,0]它会跳过操作并回到循环的开头?谢谢!
答案 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()
这将创建一个数组测试,以查看两者是否相等,并返回结果是否为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
会失去许多好处。但这是一个单独的问题。