使用3';对于';在python中集成函数和返回3d数组的循环太慢,如何优化它?
我有3个数据数组需要集成,需要返回一个3d数组。这是我的密码使用3';对于';在python中集成函数和返回3d数组的循环太慢,如何优化它?,python,arrays,Python,Arrays,我有3个数据数组需要集成,需要返回一个3d数组。这是我的密码 import numpy as np from scipy import integrate def f(x, y, z): return x + y + 2*z a = np.arange(64) b = np.arange(100) c = np.arange(100) result = [] for x in a: for y in b: for z in c: res
import numpy as np
from scipy import integrate
def f(x, y, z):
return x + y + 2*z
a = np.arange(64)
b = np.arange(100)
c = np.arange(100)
result = []
for x in a:
for y in b:
for z in c:
result.append(integrate.quad(f, 0, x, (y, z))[0])
result_1 = np.array(result).reshape(len(a), len(b), len(c))
print(result_1)
这是可行的,但这段代码太慢了,我需要处理比这更大的问题。还有其他方法吗,比如广播?下面是我需要处理的函数:
import numpy as np
from scipy import integrate, special
def f(v,r):
alpha = 0.5
chi = 1/2*special.erf((r+1.2)/0.3)-1/2*special.erf((r-1.2)/0.3)
return 4/(np.sqrt(2*np.pi*alpha))*chi*np.exp(-v**2/(2*alpha))
def E_1(r):
def f_1(v,r):
return r*f(v,r)
a = 0
b = r
g = lambda x: -np.inf
h = lambda x: np.inf
return integrate.dblquad(f_1, a, b, g, h)
def E_f(tau, xi_1, xi_2):
return E_1(xi_1*np.cos(tau) + xi_2*np.sin(tau))[0]*(-np.sin(tau))
我需要将tau、xiu 1、xiu 2作为三个数组输入,然后返回到一个3D数组。它的排列像坐标,每个坐标点对应一个结果。就像第一个示例一样。尝试使用列表理解,它比需要集成excat函数的loopsIs更具python风格,速度也更快?“这很容易用手完成。”Shubham Namdeo,看起来更简洁。但它不是更快,我只是试过了。非常感谢。anyway@Julien,它不是我需要集成的确切函数,我只是用这个函数来测试。我的函数很复杂,除非你给我们精确的函数,否则我们帮不了什么忙。