What is going on behind this numpy selection behav

2019-01-27 23:29发布

Answering this question, some others and I were actually wrong by considering that the following would work:

Say one has

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

What is the reason behind

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

while one has

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


or

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

or

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

Is it the degeneracy in term of dimensions which causes this.

1条回答
贪生不怕死
2楼-- · 2019-01-28 00:04

nptest is a 2D array of object dtype, and the first element of each row is a list.

nptest[:, 0] is a 1D array of object dtype, each of whose elements are lists.

When you do nptest[:,0]==[1], NumPy does not perform an elementwise comparison of each element of nptest[:,0] against the list [1]. It creates as high-dimensional an array as it can from [1], producing the 1D array np.array([1]), and then broadcasts the comparison, comparing each element of nptest[:,0] against the integer 1.

Since no list in nptest[:, 0] is equal to 1, all elements of the result are False.

查看更多
登录 后发表回答