如何在Python中有效地匹配两个数组值?

2024-07-03 06:52:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到在Python中匹配两个数组轴的最佳方法,很可能是使用Numpy。 更准确地说: 我有C,它是一个H x W x L矩阵和D,它是一个H x W矩阵。H和W是图像的高度和宽度,L是例如可以在图像中显示的亮度集(0100)。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矩阵有关。你知道吗

好吧,这就是我迄今为止所尝试的,谢谢你一如既往的帮助!你知道吗


Tags: 方法in图像importnumpyfornprange
2条回答

为什么不把D的所有值相加呢?有没有可能C中的亮度不会出现在D中,这是为什么?你知道吗

无论如何,另一种实现方法是重复C的值以匹配D的形状,然后只对匹配的值求和,前提是C的每个像素没有重复的值。你知道吗

D_repeated = np.repeat(D[:, :, np.newaxis], L, axis=2)
sum = np.sum(C[C==D_repeated])

我正在使用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使用哪个索引来获得正确的值。你知道吗

相关问题 更多 >