[英]Numpy slice of arbitrary dimensions
我想切片一個 numpy 數組以獲得最后一維中的第i
個索引。 對於 3D 數組,這將是:
slice = myarray[:, :, i]
但是我正在編寫一個函數,我可以在其中獲取任意維度的數組,因此對於 4D 數組,我需要myarray[:, :, :, i]
等等。 有沒有一種方法可以為任何數組獲取此切片,而無需顯式編寫數組維度?
有...
或Ellipsis
,它正是這樣做的:
slice = myarray[..., i]
Ellipsis 是 python 對象,如果您想在方括號表示法之外使用它。
其實,剛剛找到答案。 正如numpy 的文檔中所述,這可以通過 slice 對象來完成。 在我的特殊情況下,這樣做可以:
idx = [slice(None)] * (myarray.ndim - 1) + [i]
my_slice = myarray[idx]
slice(None)
相當於選擇該索引中的所有元素,最后一個 [i] 為最后一個維度選擇特定索引。
在切片任意維度方面,之前的優秀答案可以擴展到:
indx = [slice(None)]*myarray.ndim
indx[slice_dim] = i
sliced = myarray[indx]
這將返回來自任何維度slice_dim
的切片 - slice_dim = -1
再現了先前的答案。 為了完整起見 - 上述清單的前兩行可以濃縮為:
indx = [slice(None)]*(slice_dim) + [i] + [slice(None)]*(myarray.ndim-slice_dim-1)
雖然我發現以前的版本更具可讀性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.