簡體   English   中英

元組作為多維數組中的索引以及切片

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

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