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 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值