[英]Getting a slice of a numpy ndarray (for arbitary dimensions)
我有一個任意維度的Numpy數組,以及一個索引向量,其中每個維度包含一個數字。 我想獲得與索引集相對應的數組切片,小於所有維度的索引數組中的值,例如
A = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]])
index = [2,3]
result = [[1,2,3],
[5,6,7]]
直觀的語法類似於A[:index]
,但是由於明顯的原因,它無法正常工作。
如果數組的尺寸是固定的,我可以寫成A[:index[0],:index[1],
... :index[n]]
; 我是否可以使用某種列表理解功能,例如A[:i for i in index]
?
您可以一次切片多個尺寸:
result = A[:2,:3]
將維度1擴展到索引2,將維度2擴展到索引3。
如果您具有任意尺寸,則還可以創建一個切片tuple
:
slicer = tuple(slice(0, i, 1) for i in index)
result = A[slicer]
切片定義start
(0), stop
(您指定的索引)和step
(1)-基本類似於range
但可用於索引。 元組的第i個條目將切片數組的第i個維度。
如果僅指定stop
-indices,則可以使用速記:
slicer = tuple(slice(i) for i in index)
如果您知道尺寸的數量,我建議第一個選擇,如果您不知道尺寸,則建議最后一個選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.