繁体   English   中英

用索引矩阵检索值的Python方法?

[英]Pythonic way of retrieving values with a matrix of indices?

我有一个3×3的numpy数组A和另一个2×2的numpy数组B ,告诉我每个(h,w)位置从A中获取值的位置。 C表示结果矩阵(h-by-w-by-3)。

天真的,我能做

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], :]

但我敢肯定,这里有更有效,更pythonic和更快的方法!

确实有:

>>> 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM