Python Numpy切片后结果数组形状的确定

Python Numpy切片后结果数组形状的确定,python,arrays,numpy,Python,Arrays,Numpy,我很难理解在numpy中切片后如何确定合成阵列的形状。例如,我使用以下简单代码: import numpy as np array=np.arange(27).reshape(3,3,3) slice1 = array[:,1:2,1] slice2= array[:,1,1] print "Content in slice1 is ", slice1 print "Shape of slice1 is ", slice1.shape print "Content in slice2

我很难理解在numpy中切片后如何确定合成阵列的形状。例如,我使用以下简单代码:

import numpy as np


array=np.arange(27).reshape(3,3,3)

slice1 = array[:,1:2,1]
slice2= array[:,1,1]

print "Content in slice1 is  ", slice1
print "Shape of slice1 is ", slice1.shape
print "Content in slice2 is ",slice2
print "Shape of Slice2 is", slice2.shape
这项研究的结果是:

Content in slice1 is 
 [[ 4]
  [13]
  [22]]
Shape of slice1 is  (3, 1)
Content in slice2 is  [ 4 13 22]
Shape of Slice2 is (3,)

在这两种情况下,内容都是相同的(应该是一样的)。但它们的形状不同。那么,结果形状是如何由numpy确定的呢

基本上可以归结为-

In [118]: a = np.array([1,2,3,4,5])

In [119]: a[1:2]
Out[119]: array([2])

In [120]: a[1]
Out[120]: 2
当您执行
a[1:2]
时,您要求的是一个包含1个元素的数组

当您执行
a[1]
操作时,您正在请求该索引处的元素


类似的事情也发生在你身上

当您执行-
数组[:,1:2,1]
时,它意味着来自第一维度的所有可能索引、来自第二维度的索引子列表(尽管子列表仅包含一个元素)以及来自第三维度的第一个索引。所以你得到了一个数组-

 [[ 4]
  [13]
  [22]]
当您执行-
数组[:,1,1]
时,它意味着来自第一维度的所有可能索引、来自第二维度的第一个索引和来自第三维度的第一个索引。所以你得到了一个数组-

[4 13 22]

基本上:切片不会减少维度数量,但使用整数索引每次会减少1个维度数量。有一个
shape
属性。查看
x.\uuuu数组\u接口\uuuu
以查看它和其他属性。