回答这个question,我和其他一些人实际上认为是错误的,因为认为以下方法可行:

说一个有

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是对象dtype的2D数组,每行的第一个元素是一个列表。
nptest[:, 0]是对象dtype的一维数组,其每个元素都是列表。

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

由于nptest[:, 0]中没有列表等于1,因此结果的所有元素均为False。

关于python - 这种numpy选择行为的背后是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45426587/

10-09 03:04