NumPy三维数组中间索引错误问题

3

当我使用 Python 2.7 和 numpy 模块时,似乎发现了一个 bug:

import numpy as np
x=np.arange(3*4*5).reshape(3,4,5)
x

这里我得到了完整的 'x' 数组,如下所示:

array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]]])

然后我尝试在表格[1]中对单行值进行索引:

x[1][0][:]

结果:

array([20, 21, 22, 23, 24])

但是在尝试对表格[1]中的单列进行索引时出现了问题:

x[1][:][0]

结果仍与之前相同:

array([20, 21, 22, 23, 24])

它应该是array([20, 25, 30, 35])吗?

在使用range索引中间索引时似乎出现了一些问题?


2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - ayhan
或者是完整的工作原理,即a [1,:,:] [:,0] 数组[20,25,30,35]....切割中间,然后切割列 - user1121588
2个回答

3
不,这不是一个bug。
当你使用`[:]`时,实际上使用的是切片符号,并且它会取得整个列表。
l = ["a", "b", "c"]
l[:]
#output:
["a", "b", "c"]

而在你的情况下:
x[1][:]
#output:
array([[20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34],
       [35, 36, 37, 38, 39]])

您真正希望使用NumPy的索引符号:索引
x[1, : ,0]
#output:
array([20, 25, 30, 35])

1
这不是一个bug。 x[1][:][0] 不是一个多重索引(“给我第一维为1,第二维为任意,第三维为0的元素”)。相反,您正在对三个对象进行索引。
x1 = x[1]     # x1 is the first 4x5 subarray
x2 = x1[:]    # x2 is same as x1
x3 = x2[0]    # x3 is the first row of x2

要使用多个索引,您需要在一个切片中执行:
x[1, :, 0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接