我试图找到在Python中匹配两个数组轴的最佳方法,最有可能使用Numpy。
更准确地说:
我有C
是H xW x L矩阵,还有D
是H xW矩阵。 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 矩阵有关。
好吧,这是我到目前为止所做的,感谢您一如既往的帮助!
答案 0 :(得分:0)
为什么不只对D
的所有值求和? C
中的亮度有可能不会出现在D
中,这是为什么吗?
无论如何,另一种实现所需功能的方法是重复C
的值以匹配D
的形状,然后仅对匹配的值求和,前提是C的每个像素均不没有重复的值。
D_repeated = np.repeat(D[:, :, np.newaxis], L, axis=2)
sum = np.sum(C[C==D_repeated])
答案 1 :(得分:0)
我正在用numpy.meshgrid
修改该线程以包含答案。
一个人可以做到:
import numpy as np
lines, columns = np.meshgrid(range(H), range(W), indexing='ij')
sum = np.sum(C[lines, columns, D])
这样,D
中的值会告诉C
中使用哪个索引来获取正确的值。