这种笨拙的选择行为背后发生了什么?

时间:2017-07-31 23:07:28

标签: python numpy numpy-broadcasting

通过考虑以下方法可以解决这个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)

是否因为尺寸而导致退化

1 个答案:

答案 0 :(得分:3)

nptest是一个对象dtype的2D数组,每行的第一个元素是一个列表。

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

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

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