python多维数组拟合_python – 将3D数据数组拟合到具有numpy或scipy的1D函数
使用
np.apply_along_axis()可以解决您的问题.这样做:
func1d = lambda y, *args: optimize.curve_fit(f, xdata=x, ydata=y, *args)[0] #
param = np.apply_along_axis( func1d, axis=2, arr=data )
请参阅以下示例:
from scipy import optimize
import numpy as np
def f(x,p1,p2,p3,p4):
return p1 + p2*np.sin(2*np.pi*p3*x + p4)
sx = 50 # size x
sy = 200 # size y
sz = 100 # size z
# creating the reference parameters
tmp = np.empty((4,sy,sz))
tmp[0,:,:] = (1.2-0.8) * np.random.random_sample((sy,sz)) + 0.8
tmp[1,:,:] = (1.2-0.8) * np.random.random_sample((sy,sz)) + 0.8
tmp[2,:,:] = np.ones((sy,sz))
tmp[3,:,:] = np.ones((sy,sz))*np.pi/4
param_ref = np.empty((4,sy,sz,sx)) # param_ref in this shape will allow an
for i in range(sx): # one-shot evaluation of f() to create
param_ref[:,:,:,i] = tmp # the data sample
# creating the data sample
x = np.linspace(0,2*np.pi)
factor = (1.1-0.9)*np.random.random_sample((sy,sz,sx))+0.9
data = f(x, *param_ref) * factor # the one-shot evalution is here
# finding the adjusted parameters
func1d = lambda y, *args: optimize.curve_fit(f, xdata=x, ydata=y, *args)[0] #
param = np.apply_along_axis( func1d, axis=2, arr=data )
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
