簡體   English   中英

任意尺寸的 Numpy 切片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM