首页 > 解决方案 > numpy索引意外行为

问题描述

我有一个bla形状为 (6,4) 的 ndarray。当我打印它时,我得到:

    [[0. 1. 1. 1.]
     [0. 0. 0. 2.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]

都很正常。

但是,当我尝试从中获取元素时,bla[0][0]我得到了IndexError: invalid index to scalar variable.

我可以得到第一行bla[0],它返回[0. 1. 1. 1.](如预期的那样)。但是,我无法获得第一列bla[:,0]- 这会返回IndexError: too many indices for array

我以为我犯了某种用户错误,但在检查和重新检查之后,我无法理解问题可能是什么。np.zeros((6,4))[0][0]按预期执行工作。

更新1

另一个奇怪的现象:np.zeros((6,4))==np.zeros(bla.shape)给出True,但np.zeros(bla.shape)[0][0]给出错误,而np.zeros((6,4))[0][0]工作正常(直接来自输出bla.shape: (6, 4):)

    repr(bla):
    array([[0., 1., 1., 1.],
    [0., 0., 0., 2.],
    [0., 0., 0., 0.],
    [0., 0., 0., 0.],
    [0., 0., 0., 0.],
    [0., 0., 0., 0.]])

UPDATE2 pickle.dumps(bla) 给出了这个:

b'\x80\x03cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02C\x01bq\x03\x87q\x04Rq\x05(K\x01K\x06K\x04\x86q\x06cnumpy\ndtype\nq\x07X\x02\x00\x00\x00f8q\x08K\x00K\x01\x87q\tRq\n(K\x03X\x01\x00\x00\x00<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89C\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00q\rtq\x0eb.'

标签: pythonnumpy

解决方案


推荐阅读