将两个数字的列表转换为数组的索引
Convert a list of two numbers to indices for an array
简短版本:给定一个包含两个元素 [i, j]
的列表,我如何获得 i、j -元素二维数组而不是 i、j 行: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 元素列表,其中包含您想要的索引 i 和 j在二维数组中访问。我将二维数组表示为 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
简短版本:给定一个包含两个元素 [i, j]
的列表,我如何获得 i、j -元素二维数组而不是 i、j 行: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 元素列表,其中包含您想要的索引 i 和 j在二维数组中访问。我将二维数组表示为 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