Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 评估(False为False)在特定情况下返回False_Python_Numpy_Boolean - Fatal编程技术网

Python 评估(False为False)在特定情况下返回False

Python 评估(False为False)在特定情况下返回False,python,numpy,boolean,Python,Numpy,Boolean,我在Python中遇到了一个奇怪的问题,其中计算涉及np.linalg.norm值的条件会引起问题。这是我的测试脚本: import numpy as np def isGoalReached(): start = np.array([4, 5, 6]) goal = np.array([17, 18, 19]) dist = np.linalg.norm(start - goal) return (dist < 0.5) print (isGoalRe

我在Python中遇到了一个奇怪的问题,其中计算涉及np.linalg.norm值的条件会引起问题。这是我的测试脚本:

import numpy as np

def isGoalReached():
    start = np.array([4, 5, 6])
    goal = np.array([17, 18, 19])
    dist = np.linalg.norm(start - goal)
    return (dist < 0.5)

print (isGoalReached())
print (isGoalReached() == 0)
print (isGoalReached() is False)
如果我删除np.linalg.norm部分,并重写为:

import numpy as np

def isGoalReached():
    dist = 123.456
    return (dist < 0.5)

print (isGoalReached())
print (isGoalReached() == 0)
print (isGoalReached() is False)

是什么导致了这种奇怪的行为?我使用的是Python 3.7.3 Anaconda

似乎np.linalg.norm返回一个numpy.float64,当您进行比较时,类型是numpy.bool\u

这就是为什么它不起作用。如果你加上

return bool(dist < 0.5)

它会像你在这里期望的那样工作

似乎np.linalg.norm返回numpy.float64,在进行比较时,类型为numpy.bool\

这就是为什么它不起作用。如果你加上

return bool(dist < 0.5)

它会像你在这里期望的那样工作

您正在比较id函数的返回值

文件中说:

I对象

返回对象的“标识”。这是一个整数 保证该对象在运行期间唯一且恒定 它的一生。两个生命周期不重叠的对象可能具有相同的 相同的id值

CPython实现细节:这是中对象的地址 记忆

即使你只有布尔人,而没有一些裸体类型,你也不能保证总是为他们获得相同的id


使用==比较布尔值,而不是is。

您正在比较id函数的返回值

文件中说:

I对象

返回对象的“标识”。这是一个整数 保证该对象在运行期间唯一且恒定 它的一生。两个生命周期不重叠的对象可能具有相同的 相同的id值

CPython实现细节:这是中对象的地址 记忆

即使你只有布尔人,而没有一些裸体类型,你也不能保证总是为他们获得相同的id


使用==来比较布尔值,而不是is。

的确很奇怪,但与您所说的相反,这不是一个问题,因为您不应该通过is或其他方式来比较布尔值。其中一个是Python bool,另一个是numpy.bool\。它们的类型是不同的。我只是可以从文档中看到一个正常的行为。确实很奇怪,但与您所说的相反,这不是一个问题,因为您根本不应该通过is或其他方式来比较布尔值。其中一个是Python bool,另一个是numpy.bool\u。它们的类型不同。我只是可以看到文档中的正常行为。“使用==来比较布尔值”-不,真的,请不要,至少不要与文本进行比较。写==True或==False是毫无意义的。@KonradRudolph if x==True和if x==False可以缩短为if x和if not x,但如果有两个布尔值x和y,那么应该写x==y,而不是x是yNot“can be”,应该是。这是我的观点。至于比较两个布尔变量,比如x==y,一方面我可以计算出在二十多年的编程中我不得不这么做的次数。好的代码几乎从不需要它。“使用==来比较布尔值”-不,真的,请不要,至少不要与文本进行比较。写==True或==False是毫无意义的。@KonradRudolph if x==True和if x==False可以缩短为if x和if not x,但如果有两个布尔值x和y,那么应该写x==y,而不是x是yNot“can be”,应该是。这是我的观点。至于比较两个布尔变量,比如x==y,一方面我可以计算出在二十多年的编程中我不得不这么做的次数。好的代码几乎从不需要它。
In [83]: np.bool_?                                                                                      
Init signature: np.bool_(self, /, *args, **kwargs)
Docstring:     
Boolean type (True or False), stored as a byte.
return bool(dist < 0.5)