簡短版本:給定一個包含兩個元素的串列[i, j],如何獲取二維陣列的i , j元素而不是i , j行:arr[[i,j]]to arr[i,j]。
我見過使用過的類似案例*list,但我并不完全了解該運算子的作業原理。
更深層次的背景:
我有一個回傳嵌套串列的函式,其中每個子串列是一對要在陣列中使用的索引:
grid = np.full((3,3), 1)
def path():
...
return [[i_1, j_1], [i_2, j_2], ...]
for i in path():
grid[path()[i]] = 0
但由于path()[i]是一個串列,grid[path()[i]] == 0將兩行設定為零,而不是單個元素。我該如何防止?
雖然不是絕對必要的,但更快的解決方案會更可取,因為此操作將進行多次。
uj5u.com熱心網友回復:
使您感到困惑的是 Python/編程語言中數學符號和索引 2D(或 n 維)串列的差異。
如果您有一個數學中的二維矩陣,稱為X,并且假設您想訪問第一行和第一列中的元素,您將撰寫X(1, 1)。
如果你有一個二維陣列,它的元素是串列。因此,如果您想訪問名為X的陣列的第一行,您可以執行以下操作:
X[0] # 0 because indexation starts at 0
請記住,前一條陳述句回傳一個新串列。您也可以將此串列編入索引。由于我們需要第一列,我們這樣做:
X[0][0] # element in 1st row and 1st column of matrix X
因此,答案是您需要連續索引矩陣,即應用鏈索引。
至于你原來的問題,這是我的答案。假設a是 2 元素串列,其中包含要在 2D 陣列中訪問的索引i和j。我將二維陣串列示為b。然后你申請鏈的索引,第一個指標是第一要素一個和第二個指標是第二個元素一:
a = [0, 0] # list with 2 elements containing the indices
b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 2D array in which you want to access b[0][0]
i, j = a[0], a[1]
print(b[i][j])
顯然你不需要使用變數i, j,我只是為了清楚起見才這樣做:
print(b[a[0]][a[1]])
這兩個陳述句都列印出b的第一行和第一列中的元素:
1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368106.html
上一篇:練習多重組合,串列中的函式
