python - 通过 Python 中的索引列表访问 Matrix 的元素,以在没有 for 循环的情况下将 max(val, 0.5) 应用于每个值

标签 python arrays python-3.x matrix indices

我知道如何通过索引访问向量中的元素:

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/

相关文章:

sql-server - 将 SSRS 报告从 Python 导出为 PDF

python - 在 Python 中创建一个类的默认对象列表?

c# - LibTiff.Net 将 Tiff 对象转换为字节数组并返回

python - 我的脚本无法从网页获取食品店的名称

python - 检查命令是否有检查 "guild_only"

c - 即使我释放了每个 malloc,动态结构数组和链表中的内存泄漏

python - python3中的段错误(C)

python - 如何解决错误 : ModuleNotFoundError: No module named 'jupyterhub'

python matplotlib : mark dots over Line2D

ruby - Ruby 中对象的哈希/数组