[英]tuple as index in multidimensional array together with slicing
我有一個 3 維數組A
,我需要通過元組x=[1,1]
訪問A[:,1,1]
] 。 像這樣的東西:
x = [1,1]
A[:,*x]
但是,這樣做會出現語法錯誤。 我希望能夠使用變量x
訪問A[:,1,1]
的元素,我該怎么做?
謝謝!
第二個問題:
如何做同樣的事情,而不是切片:
使用 boolean 數組。 例如,如果t
是一個布爾數組,則獲得A[t, *x]
您可以執行以下操作:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
print(A)
x = [1, 1]
print(A[(slice(None), *x)])
您可以使用slice(None)
而不是:
來構建切片元組。 tuple 環境允許使用 * 運算符進行值解包。
Output:
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]]
[3 9]
要驗證它是否匹配:
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
x = [1, 1]
s = (slice(None), *x)
print(np.allclose(A[s], A[:, 1, 1])) # True
*這是對此處找到的答案的修改:沿動態指定的軸切片 numpy 數組
編輯以反映對問題和評論的編輯:
澄清一下,您可以在元組環境中解壓縮任何您喜歡的可迭代對象。 * 運算符通常在元組中起作用。 隨心所欲地訂購您的元素。 混合不同的迭代、類型、 slice(None)
,無論你想如何構建你的切片,只要你最終得到一個有效的值序列,它就會按預期運行。
import numpy as np
A = np.arange(12).reshape((2, 3, 2))
t = [True, False]
x = [1, 1]
print(np.allclose(A[(*t, *x)], A[True, False, 1, 1])) # True
您還可以在元組中添加完整列表:
print(np.allclose(A[(t, *x)], A[[True, False], 1, 1])) # True
你可以使用slice(None)
而不是:
,所以
y = tuple([slice[None]] + x)
A[y]
是你需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.