Orginal和Mutated都是图像。我需要分别得到r,g,b的差值。我让这段代码正常工作,但它太慢了。如果能帮上忙就好了!:)
Orginal = np.asarray(Orginal).copy()
Mutated = np.asarray(Mutated).copy()
Fittnes = 0
for x in range(0, 299):
for y in range(0, 299):
DeltaRed = (Orginal[x][y][0] - Mutated[x][y][0])
DeltaGreen = (Orginal[x][y][1] - Mutated[x][y][1])
DeltaBlue = (Orginal[x][y][2] - Mutated[x][y][2])
Fittnes += (DeltaRed * DeltaRed + DeltaGreen * DeltaGreen + DeltaBlue * DeltaBlue)
return Fittnes发布于 2015-11-15 10:20:57
如果你不做额外的压缩,然后对每个维度求和,而不是使用numpy的sum函数,那么它应该会快得多:
DeltaRed = np.sum(OR) - np.sum(MR)
DeltaGreen = np.sum(OG) - np.sum(MG)
DeltaBlue = np.sum(OB) - np.sum(MB)发布于 2015-11-15 16:43:58
这里有一种方法可以用ndarray.sum在一次求和中完成所有这些-
DeltaRed, DeltaGreen, DeltaBlue = Orginal.sum((0,1)) - Mutated.sum((0,1))这是另一个与np.einsum的,希望更快的一个,当处理uint8图像时-
org_diff = np.einsum('ijk->k',Orginal.astype('uint64'))
mut_diff = np.einsum('ijk->k',Mutated.astype('uint64'))
DeltaRed, DeltaGreen, DeltaBlue = org_diff - mut_diff发布于 2015-11-16 01:40:46
这是从一开始就起作用的代码。
Fittnes = 0
for x in range(0, 299):
for y in range(0, 299):
DeltaRed = (Orginal[x][y][0] - Mutated[x][y][0])
DeltaGreen = (Orginal[x][y][1] - Mutated[x][y][1])
DeltaBlue = (Orginal[x][y][2] - Mutated[x][y][2])
Fittnes += (DeltaRed * DeltaRed + DeltaGreen * DeltaGreen + DeltaBlue * DeltaBlue)
return Fittneshttps://stackoverflow.com/questions/33715627
复制相似问题