为什么asarray和list会有不同的反应?

时间:2019-10-09 09:31:05

标签: numpy types difference

我正试图了解原因:

 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],似乎更合逻辑

所以:为什么列表确实返回第二个元素?

1 个答案:

答案 0 :(得分:1)

listndarray实施比较的方式有所不同。特别是:

  • 与其他内容相比,list返回一个boolTrue的单个False值。显然,列表w不是值0.2,因此w != 0.2返回True

  • 一个ndarray通过返回一个布尔值ndarray来表示比较,该布尔值表示每个数组元素的比较。因此,w != 0.2返回[True False True True]

因此

  • 对于listw[w!=0.2]w[True],这被视为含义w[1]

  • 对于ndarray,是w[ ndarray([True False True True]) ],然后利用numpy的数组索引仅返回布尔值为True

  • 的那些元素