【发布时间】:2019-09-02 00:35:27
【问题描述】:
我正在尝试在 Python 中找到匹配两个数组轴的最佳方法,最有可能使用 Numpy。
更准确地说:
我有C 这是一个 H x W x L 矩阵和 D 这是一个 H x W 矩阵。 H和W是图像的高度和宽度,L例如是可以在图像中显示的亮度的集合(例如0到100 )。 D 包含像素的真实亮度。
我想将与 D 矩阵中的亮度匹配的像素的C 第三轴上的亮度相关的所有值相加,例如D 矩阵中的值会告诉我使用哪个索引来获取C 矩阵中的值。
当然,我可以通过三个循环轻松做到这一点:
sum = 0
for row in range(H) :
for column in range(W) :
for luminance in range(L) :
if luminance == D[row, column] :
sum += C[row, column, luminance]
break
但这不是有效的。我正在尝试找到一种使用 numpy 执行此操作的方法,如下所示:
import numpy as np
sum = np.sum(C[:, :, np.where(C[:,:] == [D[:,:]])[0][0]))
我不知道这是否应该工作。 我认为可能有一种方法可以使用 meshgrid 函数轻松遍历像素,并通过调用正确匹配
import numpy as np
sum = np.sum(np.meshgrid(range(H), range(W), f(D)))
其中 f(D) 必须与 D 矩阵有关。
嗯,这就是我目前所尝试的,一如既往地感谢您的帮助!
【问题讨论】:
-
我认为 np.sum(C[:,:,0] == D) 应该足够了
-
第三个轴包含 0 和 L-1 之间的值:我想添加这些值,因为它们与 D 中的值匹配(像素到像素)。在这里,我只会添加我认为的,因为它会返回一个布尔矩阵。