Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用numpy加速Python代码?_Python_Performance_Numpy - Fatal编程技术网

如何使用numpy加速Python代码?

如何使用numpy加速Python代码?,python,performance,numpy,Python,Performance,Numpy,original和Mutated是图像。 我需要分别得到每个r,g,b的差。我让这个代码工作,但它是缓慢的。如果能帮上忙,那就太好了!:) 如果您不进行额外的压缩,然后对每个维度进行求和,而不是使用numpy的求和函数,那么速度应该会快得多: DeltaRed = np.sum(OR) - np.sum(MR) DeltaGreen = np.sum(OG) - np.sum(MG) DeltaBlue = np.sum(OB) - np.sum(MB) 如果您不进行额外的压缩,然后对每个

original
Mutated
是图像。 我需要分别得到每个r,g,b的差。我让这个代码工作,但它是缓慢的。如果能帮上忙,那就太好了!:)


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

DeltaRed   = np.sum(OR) - np.sum(MR)
DeltaGreen = np.sum(OG) - np.sum(MG)
DeltaBlue = np.sum(OB) - np.sum(MB)

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

DeltaRed   = np.sum(OR) - np.sum(MR)
DeltaGreen = np.sum(OG) - np.sum(MG)
DeltaBlue = np.sum(OB) - np.sum(MB)

这里有一种方法可以在一次求和中使用-

下面是另一个,当使用
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

这里有一种方法可以在一次求和中使用-

下面是另一个,当使用
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

这就是从一开始就有效的代码

    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

这就是从一开始就有效的代码

    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


你想重做python部分吗?因为有一种方法可以加速numpy本身,所以使用intel MKL可以获得更好的代码。任何更好的解决办法都是helpfull@SeverinPappadeuxMKL仅与线性代数运算相关,例如矩阵积。简单的矢量化减法和求和由numpy的内部而不是外部库处理?因为有一种方法可以加速numpy本身,所以使用intel MKL可以获得更好的代码。任何更好的解决办法都是helpfull@SeverinPappadeuxMKL仅与线性代数运算相关,例如矩阵积。简单的矢量化减法和求和是由numpy的内部库而不是外部库处理的。有什么方法可以进一步改进它吗?在我的电脑上,这至少可以使速度提高100倍。除此之外,我还必须了解您的特定用例。如果你对整个图像进行总结,所有额外的改进都会很小。有什么方法可以进一步改进吗?在我的电脑上,这至少可以让你的速度提高100倍。除此之外,我还必须了解您的特定用例。如果你对整个图像进行汇总,所有额外的改进都会很小。这会得到总的RGB变化,我需要他们计算每个像素的RGB差异,并得到所有像素组合的总RGB变化。@Funktiona`RGB difference for each pixel`将是
原始-变异的
,对吗?所有像素组合的总RGB变化将如解决方案中所列?请看下面的“我的代码”。他们做的和你的不一样solutions@Funktiona原始和变异的数据类型是什么?它们都是numpy。一旦获得总RGB变化,我需要它们计算每个像素的RGB差异,并获得所有像素组合的总RGB变化。@Funktiona“每个像素的RGB差异”将是原始变异的,对吗?所有像素组合的总RGB变化将如解决方案中所列?请看下面的“我的代码”。他们做的和你的不一样solutions@Funktiona原始和变异的数据类型是什么?它们是numpy.asarray