簡體   English   中英

使用列表進行Numpy 3D數組索引

[英]Numpy 3D array indexing using lists

假設我有一個形狀為(10,1000,1000)的numpy數組,並且我有三個列表,它們應該表示每個軸的索引范圍,如下所示:

z_range = [0, 5]
y_range = [200, 300]
x_range = [300, 500]

我知道我可以執行以下操作,但是似乎很冗長:

arr[z_range[0]:z_range[1], y_range[0]:y_range[1], x_range[0]:x_range[1]]

是否有使用三個列表對特定數組進行切片的更簡單方法?

索引需要一個元組,因此您可以使用生成器表達式動態地構建元組:

>>> z_range = [0, 3]
>>> y_range = [2, 3]
>>> x_range = [3, 5]
>>> arr = numpy.arange(5*5*5).reshape(5,5,5)
>>> arr[tuple(slice(a, b) for a,b in (x_range, y_range, z_range))]
array([[[ 85,  86,  87]],

       [[110, 111, 112]]])

我真的想不出辦法。 使用Numpy的各種索引技巧之一可能會有更好的方法。 我能想到的最簡單的方法是手動制作slice()對象。 start:end語法實際上直接轉換為slice(start, end)對象。 所以你可以這樣寫:

arr[slice(*z_range), slice(*y_range), slice(*x_range)]

所以至少好一點,但我認為您在清晰度方面並沒有真正獲得多少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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