据我所知,切片信息并未存储在任何地方,但您也许可以从视图和基础的属性中推断出来。
例如:
In [156]: x=np.arange(10)
In [157]: y=x[3:]
In [159]: y.base
Out[159]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [160]: y.data
Out[160]: <memory at 0xb1a16b8c>
In [161]: y.base.data
Out[161]: <memory at 0xb1a16bf4>
我更喜欢__array_interface__ 的值:
In [162]: y.__array_interface__['data']
Out[162]: (163056924, False)
In [163]: y.base.__array_interface__['data']
Out[163]: (163056912, False)
所以y 数据缓冲区开始超过x 12 个字节。而且由于y.itemsize是4,这意味着切片开始是3。
In [164]: y.shape
Out[164]: (7,)
In [165]: x.shape
Out[165]: (10,)
比较形状,我推断切片停止是None(结束)。
对于二维数组或阶梯式切片,您还必须查看 strides。
但实际上,将切片对象(元组、切片等)传递给您的函数可能更容易、更安全,而不是从结果中推断出来。
In [173]: S=np.s_[1:-1]
In [174]: S
Out[174]: slice(1, -1, None)
In [175]: x[S]
Out[175]: array([1, 2, 3, 4, 5, 6, 7, 8])
即传递S 本身,而不是推断它。我以前从未见过它。