Python 高效快速的二维阵列函数调用

Python 高效快速的二维阵列函数调用,python,arrays,optimization,numpy,Python,Arrays,Optimization,Numpy,我有一个2d numpy对象数组:a和一个numpy值数组:l(nx2数组) 2d numpy对象数组中的每个元素都有两个值,例如[ax1,ay1],对于l,也有类似的值 我调用自己的距离函数,计算l的第一个元素与A中的每个元素之间的距离,然后取最小距离。循环如下所示: for r in range(A.shape[0]): for s in range(A.shape[1]): lencent = l.shape[0] dist = []

我有一个2d numpy对象数组:
a
和一个numpy值数组:
l
(nx2数组)

2d numpy对象数组中的每个元素都有两个值,例如[ax1,ay1],对于
l
,也有类似的值

我调用自己的距离函数,计算l的第一个元素与A中的每个元素之间的距离,然后取最小距离。循环如下所示:

for r in range(A.shape[0]):
    for s in range(A.shape[1]):
        lencent = l.shape[0]
        dist = []
        for p in range(lencent):
             dist.append(distancefunction(A[r,s],A[r,s],l[p,0],l[p,1]))
        #print dist
        val = np.min(dist)
        #print val
        tempimg[r,s] = val

但是,当numpy数组A较大或l较大,或两者都较大时,这需要花费大量时间。是否有任何pythonic方法来优化此循环的性能?

使用NumPy(如果可能)使此双循环更快,很可能需要查看
距离函数的定义。计算W2 distance()是一个复杂的函数NumPy对象数组比NumPy浮点数组慢。它们甚至可能比Python列表还要慢。Python循环通常比等价的NumPy函数调用慢。在上面的例子中,您只在一个地方使用了NumPy:
np.min
。为了使用NumPy获得更好的性能,您需要将更多的工作卸载到NumPy函数调用。由于在您发布的代码中没有太多这样做的机会,因此唯一可以改进的地方是重写
distance function
,以接受
A
l
作为输入,并返回结果数组,而不是一次只返回一个数字;您可以提供distancefunction代码,因此如果可能,我们可以建议其基于numpy的计算,或者其他改进。这是提高性能的唯一可能。正如评论所建议的,我将放弃这个问题并发布一个新问题。发布
distance函数
,询问如何使其针对numpy进行优化。如果它涉及阵列操作(以及查找和def,当然可能),您会注意到一个很大的加速。