Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
Python 有没有办法加快这些嵌套循环(拉普拉斯式)的速度?_Python_Performance_Loops_Nested Loops - Fatal编程技术网

Python 有没有办法加快这些嵌套循环(拉普拉斯式)的速度?

Python 有没有办法加快这些嵌套循环(拉普拉斯式)的速度?,python,performance,loops,nested-loops,Python,Performance,Loops,Nested Loops,我正在尝试加速我的函数图中的嵌套循环 我的函数是拉普拉斯函数(Abel),因为它需要为矩阵的每个单元计算一行一列的范数 abel=lambda x,y,t,p:np.exp(-np.abs(p)*np.linalg.norm(x-y)) 通过将指数部分从abel方程中去掉,我可以稍微加快函数的速度,然后我将它应用于整个矩阵 abel_2=lambda x,y,t,p:np.linalg.norm(x-y)(不要介意t和p) 时间减少了50%,但是,我相信双循环(嵌套)仍然是一个主要问题。 有人能

我正在尝试加速我的函数图中的嵌套循环

我的函数是拉普拉斯函数(Abel),因为它需要为矩阵的每个单元计算一行一列的范数

abel=lambda x,y,t,p:np.exp(-np.abs(p)*np.linalg.norm(x-y))

通过将指数部分从abel方程中去掉,我可以稍微加快函数的速度,然后我将它应用于整个矩阵

abel_2=lambda x,y,t,p:np.linalg.norm(x-y)(不要介意t和p)

时间减少了50%,但是,我相信双循环(嵌套)仍然是一个主要问题。 有人能帮忙吗?
谢谢大家!

基本上,不必一个接一个地通过循环从
Y[j:]
中减去
X[i,:]
,只需选择
X[i,:]
并从所有Y中减去它,然后在某个轴上应用范数,就可以节省大量时间

在我的例子中,它是
axis=1

def Gram_10(X,Y,function,t,p):
    n = X.shape[0]
    s = Y.shape[0]
    K = np.zeros((n,s))
    if function==abel_2:
        for i in range(n):
# it is important to put the correct slice (:s) , so the matrix provided by the norm goes
# to the right place in the function 
                K[i,:s] = np.linalg.norm(X[i,:]-Y,axis=1)
        K = np.exp(-abs(p)*K)
    else:
        K = polynomial(X,Y,t,p)
    return K
def Gram_2(X,Y,function,t,p):
    n = X.shape[0]
    s = Y.shape[0]
    K = np.zeros((n,s))
    if function==abel_2:
        for i in range(n):
            for j in range(s):
                K[i,j] = abel_2(X[i,:],Y[j,:],0,0)
        K = np.exp(-abs(p)*K)
    else:
        K = polynomial(X,Y,t,p)
    return K
def Gram_10(X,Y,function,t,p):
    n = X.shape[0]
    s = Y.shape[0]
    K = np.zeros((n,s))
    if function==abel_2:
        for i in range(n):
# it is important to put the correct slice (:s) , so the matrix provided by the norm goes
# to the right place in the function 
                K[i,:s] = np.linalg.norm(X[i,:]-Y,axis=1)
        K = np.exp(-abs(p)*K)
    else:
        K = polynomial(X,Y,t,p)
    return K