在学习numpy时,我进行了以下实验:
x = np.random.randint(10, size=(5,5,2))
x
Out[5]:
array([[[0, 5],
[8, 2],
[8, 3],
[6, 5],
[4, 5]],
[[9, 8],
[2, 1],
[7, 7],
[0, 3],
[3, 0]],
[[4, 8],
[4, 3],
[1, 8],
[7, 3],
[6, 0]],
[[3, 0],
[4, 5],
[6, 6],
[0, 6],
[9, 7]],
[[1, 8],
[0, 8],
[0, 2],
[9, 3],
[7, 1]]])
然后,我尝试了x1 = x[:,1:-1]
。它将生成一个(5,3,2)
数组。我不明白为什么1:-1
中的x[:,1:-1]
会影响x的第二维,而不是第三维。换句话说,给定像x1=x[:,1:-1]
这样的东西,我怎么知道结果x1的形状,它的基础规则是什么。
如果我输入x1=x[1:-1,:]
,则x的形状为(3,3,2)
。我对这个切片规则如何运作感到困惑。
答案 0 :(得分:2)
我试过了
x1 = x[:,1:-1]
。它将生成一个(5,3,2)
数组。
为什么它不影响第三维,因为你只提供了前两个维度的参数。逗号分隔维度。由于未给出第三个参数,因此默认情况下会考虑第三个维度的所有元素。它与x1 = x[:,1:-1,:]
没有区别。
如果我输入
x1=x[1:-1,:]
,那么x将是形状(3,3,2)。
是的,它应该是。您会发现x1=x[1:-1,:,:]
和x1=x[1:-1]
会产生相同的结果。
答案 1 :(得分:0)
我不明白为什么x [:,1:-1]中的1:-1会影响x的第二维,而不是第三维
它会影响第二个维度,因为逗号之前的:
会影响第一个维度。换句话说,如果您只是改为x1 = x[1:-1]
,那么您将获得(3, 5, 2)
数组。对于每个逗号,您将从第一个开始影响一个维度。