将两个数字的列表转换为数组的索引

Convert a list of two numbers to indices for an array

简短版本:给定一个包含两个元素 [i, j] 的列表,我如何获得 ij -元素二维数组而不是 ij 行:arr[[i,j]]arr[i,j].

我见过使用 *list 的类似案例,但我不完全理解该运算符的工作原理。

更深层次的上下文:

我有一个 returns 嵌套列表的函数,其中每个子列表都是一对要在数组中使用的索引:


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 将两个 设置为零,而不是单个元素。我该如何预防?
虽然不是绝对必要的,但更快的解决方案将是可取的,因为此操作要进行多次。

让您感到困惑的是 Python/programming 语言中数学符号和索引 2D(或 n 维)列表的差异。

如果你有一个数学中的二维矩阵,叫做 X,假设你想访问第一行第一列的元素,你会写X(1, 1).

如果你有一个二维数组,它的元素就是列表。所以,如果你想访问一个名为 X 的数组的第一行,你会这样做:

X[0] # 0 because indexation starts at 0

记住前面的语句 returns 一个新的 list。您也可以索引此列表。由于我们需要第一列,我们这样做:

X[0][0] # element in 1st row and 1st column of matrix X

因此答案是你需要连续索引矩阵,即应用链索引。

关于你原来的问题,这是我的回答。假设 a 是 2 元素列表,其中包含您想要的索引 ij在二维数组中访问。我将二维数组表示为 b。然后应用链式索引,第一个索引是 a 的第一个元素,第二个索引是 a 的第二个元素:

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行第1列的元素:

1