我很难理解在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决定的?
答案 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]