我想从大小为NxN的数组中插入一个2d函数。不幸的是,scipy'2dinterpolation返回以下错误:
分段错误(核心转储)
即使是下面列出的简化示例:
import scipy as S
import matplotlib.pyplot as plt
from scipy.interpolate import interp2d
def f(x,y):
MaxSum = 8
xTmp = y/x # trad = y
z = 0.0
for n in range(1,MaxSum):
z = z + ( ( S.exp((-1.0*n)*(1.0/y) ) - (1.0/x) ) / (n*x + y) )
return z
f_vec = S.vectorize(f)
N = 128
x = S.logspace(3,8,N) # Note that that I have to use log space for one argument!
# I suspect that this is an origin of the problem.
y = S.linspace(3000,25000,N)
i, j = S.meshgrid(x, y)
z = f_vec(i,j)
plt.figure()
plt.grid(True)
plt.contourf(z)
plt.colorbar()
plt.show()
# Interpolation
f_interpolated = interp2d(x, y, z) # error here
x_new = S.logspace(3,8,3*N)
y_new = S.linspace(3000,25000,3*N)
z_iterpolated = f_interpolated(x_new, y_new)
plt.figure()
plt.grid(True)
plt.contourf(z_iterpolated)
plt.colorbar()
plt.show()
任何想法我如何调试或如何插入它(我想坚持使用2d线性插值,因为这个scipy脚本只是在Fortran中进一步实现的原型,其中性能将是至关重要的问题)