據我所知切片信息不存儲,但你也許能夠從視圖和基本屬性推斷出結論。
例如:
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
DataBuffer中開始的12個字節以後x
。並且由於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
本身,而不是推論它。我從來沒有見過它做過。
我認爲只是通過S會打敗目的,但你提供了我需要的一個直觀的5線解決方案在1D。對於我來說,如果這種切片的使用確實在numpy中沒有預料到,這似乎很奇怪。 –