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

Numpy 为什么asarray和list的反应不同?,numpy,types,difference,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],这似乎更符合逻辑 那么:为什么列表会返回第二个元素呢?Alist和Andarray实现比较的方式不同。特别是: 当与其他内容进行比较时,列表返回一个bool值True或False。显然,列表w不是值0.2sow!=0.2返回

我试图理解为什么:

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


那么:为什么列表会返回第二个元素呢?

A
list
和A
ndarray
实现比较的方式不同。特别是:

  • 当与其他内容进行比较时,
    列表
    返回一个
    bool
    True
    False
    。显然,列表
    w
    不是值
    0.2
    so
    w!=0.2
    返回
    真值

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

因此

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

  • 对于
    ndarray
    它是
    w[ndarray([True-False-True])
    ,然后利用numpy的数组索引只返回布尔值为
    True的那些元素


归根结底,它们的反应是不同的,因为它们是不同的类型。就像猫和老虎对刺针的反应不同一样,知道有两种不同的数据类型并不奇怪。我想了解为什么list会抛出第二个元素来做出反应?这说明了为什么我可以用棍子戳猫而不是老虎!谢谢