Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy三维数组中间索引错误_Python_Arrays_Numpy - Fatal编程技术网

Python numpy三维数组中间索引错误

Python numpy三维数组中间索引错误,python,arrays,numpy,Python,Arrays,Numpy,在将python 2.7与numpy模块一起使用时,我似乎发现了一个错误: 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,

在将python 2.7与numpy模块一起使用时,我似乎发现了一个错误:

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][:]
x[1][:][0]
结果:

array([20, 21, 22, 23, 24])
但是,当我尝试为工作表[1]中的单个列编制索引时,出现了一些错误:

x[1][0][:]
x[1][:][0]
结果仍与之前相同:

array([20, 21, 22, 23, 24])
是否应该是数组([20,25,30,35])

用范围索引中间索引时似乎有问题?

不,这不是错误

当您使用
[:]
时,您使用的是切片表示法,它会占用所有列表:

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])

这不是一个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]

我想您应该使用
x[1,:,0]
而不是
x[1][:][0]
。第二个从最外层的轴获取第一个元素,然后从返回的数组中获取所有元素,从返回的数组中获取第0个元素,再次从最外层的轴获取。或者,显示完整的工作。。。[1,:,:][:,0]数组([20,25,30,35])。。。。先切中间,再切柱子