关于在numpy

时间:2016-11-15 16:55:49

标签: python numpy scipy

在学习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)。我对这个切片规则如何运作感到困惑。

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)数组。对于每个逗号,您将从第一个开始影响一个维度。