import numpy as np
mainList = []
numpyArray0 = np.array([1,2,3])
numpyArray1 = np.array([4,5,6])
mainList.append(numpyArray0)
mainList.append(numpyArray1)
print("numpyArray0 in mainList:")
try:
print(numpyArray0 in mainList)
except ValueError:
print("ValueError")
print("numpyArray1 in mainList:")
try:
print(numpyArray1 in mainList)
except ValueError:
print("ValueError")
print("mainList in numpyArray0:")
try:
print(mainList in numpyArray0)
except ValueError:
print("ValueError")
print("mainList in numpyArray1:")
try:
print(mainList in numpyArray1)
except ValueError:
print("ValueError")
print(numpyArray1 in mainList)
所以我有上面的代码,它在一个普通的python列表(mainList)中创建2个numpy数组,然后检查这2个数组是否在列表中。代码应输出:
^{pr2}$但它没有输出上述内容,而是输出以下内容:
^{3}$我做错事了吗? 请注意,在运行代码之前,我尝试过更新python、numpy和我的os(debian)。在
看起来它是一个well-known feature与Numpy数组的
==
运算符重载方式有关。在要点如下:
这将起作用:
^{pr2}$True
numpyArray0 in mainList
调用list.__contains__
。列表的__contains__
方法为列表的每个元素调用PyObject_RichCompareBool
,以检查元素是否相等。碰巧,^{numpyArray0 is mainList[0]
返回True
,因此不会进行完全比较。如果进行了完全比较,numpy
将引发ValueError
,因为numpy
数组不能被互斥为布尔值。在numpyArray1 in mainList
也显示了这一点(因为numpyArray1
与mainList[0]
的身份比较失败。在相关问题 更多 >
编程相关推荐