这种 numpy 选择行为背后发生了什么?

What is going on behind this numpy selection behavior?

回答这个 ,其他一些人和我实际上是错误的,因为考虑到以下内容会起作用:

说一个有

test = [ [ [0], 1 ],
         [ [1], 1 ]
       ]
import numpy as np
nptest = np.array(test)

背后的原因是什么

>>> nptest[:,0]==[1]
array([False, False], dtype=bool)

而一个有

>>> nptest[0,0]==[1],nptest[1,0]==[1]
(False, True)


>>> nptest==[1]
array([[False,  True],
       [False,  True]], dtype=bool)

>>> nptest==1
array([[False,  True],
       [False,  True]], dtype=bool)

是不是维度退化造成的

nptest是object dtype的二维数组,每一行的第一个元素是一个列表。

nptest[:, 0] 是对象 dtype 的一维数组,每个元素都是列表。

当您执行 nptest[:,0]==[1] 时,NumPy 不会对 nptest[:,0] 的每个元素与列表 [1] 执行逐元素比较。它从 [1] 创建一个尽可能高维的数组,生成一维数组 np.array([1]),然后 broadcasts 比较,将 nptest[:,0] 的每个元素与整数进行比较1.

由于nptest[:, 0]中没有列表等于1,所以结果的所有元素都是False。