加速嵌套循环中的浮点计算(如果可能,使用 CUDA)

Accelerate float calculations in nested loops (with CUDA if possible)

是否可以在 Python 中加速以下嵌套循环(可能使用 CUDA 或并行进程)?附加到 outputList[i] 的元素的顺序无关紧要。

目前,代码需要很长时间才能完成。哪一部分减慢了代码?是append()还是计算f = c*sin(i*pi/180) + (1/c)*cos(i*pi/180)

N = 640*480
outputList = [[] for i in range(N)]

def foo(a,b): # a, b are always integers
    c = sqrt(a**2 + b**2)
    for deg in range(360):
        f = c*sin(deg*pi/180) + (1/c)*cos(deg*pi/180)
        if (f<1):
            outputList[a].append(f)


if __name__ == '__main__':
    for x in range(N):
        for y in range(60):
            foo(x,y)

正如 talonmies 提到的,您的第一步应该是使用 numpy。

import math

import numpy as np

def foo(a, b):
    c = math.hypot(a, b)
    degs = np.arange(360, dtype='f8')
    rads = np.deg2rad(degs)
    fs = c * np.sin(rads) + (1/c)*np.cos(rads)
    below1 = fs[fs < 1.]
    outputList[a].extend(below1)

有更高级的方法来计算 sin + cos,但我暂时保持简单。此外,根据您的用例,将 outputList 更改为 2D numpy 数组或 1D numpy 数组列表