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

时间:2015-09-18 08:36:53

标签: 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 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决定的?

1 个答案:

答案 0 :(得分:5)

它基本归结为此 -

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]时,您要求该索引处的元素。

在你的情况下会发生类似的事情。

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

 [[ 4]
  [13]
  [22]]

当您执行 - array[:,1,1]时 - 它表示来自第一维的所有可能索引,第二维的第一索引和第三维的第一索引。所以你得到一个数组 -

[4 13 22]