簡體   English   中英

具有起始和結束索引列表的任意維的切片數組

[英]Slice array of arbitrary dimension with lists of start and end indices

我需要復制3D陣列的一部分。 我有副本的開始和結束索引。

例如2D數組:

[[2 2 3 4 5]
 [2 3 3 4 5]
 [2 3 4 4 5]
 [2 3 4 5 5]
 [2 3 4 5 6]]

起始索引,終止索引是:

mini = [2, 1]
maxi = [4, 3]

因此結果應為:

  [[3 4 4]
   [3 4 5]]

我可以寫:

result = matrix[mini[0]:maxi[0], mini[1]:maxi[1]]

一般有辦法嗎? 3Dim或NDim陣列?

這里的竅門是實現索引語法的本質。 這個:

result = matrix[mini[0]:maxi[0], mini[1]:maxi[1]]

是python(不僅是numpy)的簡寫形式,用於:

indices = slice(mini[0], maxi[0]), slice(mini[1], maxi[1])
result = matrix[indices]

因此,我們只需要動態生成indices

lower = [2, 1, ...]
upper = [4, 3, ...]

indices = tuple(np.s_[l:u] for l, u in zip(lower, upper))
result = matrix_nd[indices]

np.s_[a:b]slice(a, b)的簡寫。 在這里,我們建立一個元組包含多達片,你在有價值觀lowerupper

您正在尋找的是slice對象,請參見該示例:

matrix = np.random.rand(4,5)
mini = [2, 1]
maxi = [4, 3]
slices=[slice(b,e) for b, e in zip(mini,maxi)]
print(slices)
print(matrix[slices])
print(matrix[mini[0]:maxi[0], mini[1]:maxi[1]])

暫無
暫無

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

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