首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用numpy加速Python代码?

如何使用numpy加速Python代码?
EN

Stack Overflow用户
提问于 2015-11-15 10:05:19
回答 3查看 111关注 0票数 1

OrginalMutated都是图像。我需要分别得到r,g,b的差值。我让这段代码正常工作,但它太慢了。如果能帮上忙就好了!:)

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2015-11-15 10:20:57

如果你不做额外的压缩,然后对每个维度求和,而不是使用numpy的sum函数,那么它应该会快得多:

代码语言:javascript
复制
DeltaRed   = np.sum(OR) - np.sum(MR)
DeltaGreen = np.sum(OG) - np.sum(MG)
DeltaBlue = np.sum(OB) - np.sum(MB)
票数 3
EN

Stack Overflow用户

发布于 2015-11-15 16:43:58

这里有一种方法可以用ndarray.sum在一次求和中完成所有这些-

代码语言:javascript
复制
DeltaRed, DeltaGreen, DeltaBlue = Orginal.sum((0,1)) - Mutated.sum((0,1))

这是另一个与np.einsum的,希望更快的一个,当处理uint8图像时-

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-11-16 01:40:46

这是从一开始就起作用的代码。

代码语言:javascript
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33715627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档