我知道如何通过索引访问向量中的元素:
test = numpy.array([1,2,3,4,5,6])
indices = list([1,3,5])
print(test[indices])
给出正确答案:[2 4 6]
但我正在尝试使用 2D 矩阵做同样的事情,比如:
currentGrid = numpy.array( [[0, 0.1],
[0.9, 0.9],
[0.1, 0.1]])
indices = list([(0,0),(1,1)])
print(currentGrid[indices])
这应该为矩阵中 (0,0) 处的值和 (1,1) 处的值显示“[0.0 0.9]”。但它显示的是“[0.1 0.1]”。另外,如果我尝试使用 3 个索引:
indices = list([(0,0),(1,1),(0,2)])
我现在收到以下错误:
Traceback (most recent call last):
File "main.py", line 43, in <module>
print(currentGrid[indices])
IndexError: too many indices for array
我最终需要对这些索引处的所有元素应用一个简单的 max() 操作,并且需要最快的方法来实现优化目的。
我做错了什么?我如何访问矩阵中的特定元素以非常有效的方式对它们执行一些操作(不使用列表理解或循环)。
最佳答案
问题在于您传递给数组的索引的排列方式。如果您的数组是二维的,则您的索引必须是两个列表,一个包含垂直索引,另一个包含水平索引。例如:
idx_i, idx_j = zip(*[(0, 0), (1, 1), (0, 2)])
print currentGrid[idx_j, idx_i]
# [0.0, 0.9, 0.1]
请注意,索引数组时的第一个元素是最后一个维度,例如:(y, x)。我假设你将你的定义为 (x, y) 否则你会得到一个 IndexError
关于python - 通过 Python 中的索引列表访问 Matrix 的元素,以在没有 for 循环的情况下将 max(val, 0.5) 应用于每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54930176/