我很难理解在 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]
您正在询问该索引处的元素。
类似的事情也发生在你的身上。
当你这样做时——array[:,1:2,1]
- 这意味着来自第一维度的所有可能索引、来自第二维度的索引的子列表(尽管子列表仅包含一个元素)以及来自第三维度的第一个索引。所以你会得到一个数组数组 -
[[ 4]
[13]
[22]]
当你这样做时——array[:,1,1]
- 这意味着第一维的所有可能索引、第二维的第一个索引和第三维的第一个索引。所以你得到一个数组 -
[4 13 22]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)