我正试图了解原因:
w=[0.1,0.2,0.3,0.5,0]
print(w[w!=0])
输出:0.2
,
同时
w=[0.1,0.2,0.3,0.5,0]
w=np.asarray(w)
print(w[w!=0])
输出:[0.1 0.2 0.3 0.5]
,似乎更合逻辑
所以:为什么列表确实返回第二个元素?
答案 0 :(得分:1)
list
和ndarray
实施比较的方式有所不同。特别是:
与其他内容相比,list
返回一个bool
或True
的单个False
值。显然,列表w
不是值0.2
,因此w != 0.2
返回True
一个ndarray
通过返回一个布尔值ndarray
来表示比较,该布尔值表示每个数组元素的比较。因此,w != 0.2
返回[True False True True]
因此
对于list
,w[w!=0.2]
是w[True]
,这被视为含义w[1]
对于ndarray
,是w[ ndarray([True False True True]) ]
,然后利用numpy的数组索引仅返回布尔值为True