python - 用索引矩阵检索值的Pythonic方式?
问题描述
我有一个 h×w×3 numpy 数组A
和另一个 h×w×2 numpy 数组,它告诉我从每个 (h, w) 位置B
获取值的位置。用(h-by-w-by-3)A
表示结果矩阵。C
天真地,我能做到
C = np.zeros(A.shape)
for i in range(B.shape[0]):
for j in range(B.shape[1]):
C[i, j, :] = A[B[i, j, 0], B[i, j, 1], :]
但我确信有更高效、更 Python 和更快的方法!
解决方案
确实有:
>>> import numpy as np
>>>
>>> h, w = 4, 6
>>>
>>> A = np.random.randint(0, 100, (h, w, 3))
>>> B = np.random.randint(0, h*w, (h, w, 2)) % [h, w]
>>>
>>> C = np.zeros(A.shape)
>>> for i in range(B.shape[0]):
... for j in range(B.shape[1]):
... C[i, j, :] = A[B[i, j, 0], B[i, j, 1], :]
...
>>>
>>> C2 = A[(*np.moveaxis(B, 2, 0),)]
>>> np.all(C == C2)
True
推荐阅读
- node.js - Connecting to Node Mongo API v3 using multiple hosts
- junit - Mocking AEM Asset Manager using WCM IO
- jdbc - 尝试使用回滚运行 EXPLAIN ANALYZE
- javascript - 为什么我的嵌套 Vue 模板文件不渲染?
- python - 获取字典的随机子集
- java - Thymeleaf template and Spring Boot : Creating a radio input from Java enum
- sql - How to upload a .txt file to SQL table every 5 miniutes?
- java - Android studio not giving suggestions from android-src.jar
- java - 如何将数据从类传递到片段?
- rest - 在 Couchbase 中添加文档并缺少 JSON 正文