【问题标题】:Using an array in a function error在函数错误中使用数组
【发布时间】:2018-10-08 22:16:03
【问题描述】:

当我运行我的代码时,我收到错误“** 或 pow() 不支持的操作数类型:'numpy.ufunc' 和 'float'”

代码是:

import numpy as np
import matplotlib.pyplot as plt
from numpy import sqrt,exp,log
from scipy import linalg
from scipy.optimize import curve_fit

data1 = np.loadtxt('decay1.txt', float,skiprows=1)
t = data1[:,0]
n = data1[:,1]

data2 = np.loadtxt('decay2.txt', float,skiprows=1)
T = data2[:,0]
N = data2[:,1]

def Radio(n,t,tao,b):
    return (n*(exp**(-(t/tao)))) + b

guesses = (1,1,1)
guesses2 = (1,1,1)

(p0,p1,p2),cc = curve_fit(Radio,t,n,guesses)
(p02,p12,p22),cc2 = curve_fit(Radio,T,N,guesses2)

yfit = Radio(t,p0,p1,p2)
y2fit = Radio(T,p02,p12,p22)

我必须将函数拟合到放射性衰变数据,所以请告诉我,我是否也弄乱了代码以拟合函数。感谢您的帮助!

【问题讨论】:

  • 关于你的第二个问题,我没有使用scipy.optimize,但从文档中它看起来对我来说是正确的,除了我认为你在函数之间切换了输入顺序(@ 987654323@) 和曲线拟合 (t,n)
  • 我收回了,看起来配方有问题。将使用描述编辑我的答案

标签: python function numpy typeerror curve-fitting


【解决方案1】:

numpy.exp 是指数函数,** 是幂运算符,因此您试图将函数定义提升到幂 (-(t/tao))。我想你想要

def Radio(n,t,tao,b):
    return (n*(exp(-(t/tao)))) + b

关于优化功能的使用,有几个问题。首先,您将n 用作参数(在Radio 方法内)和因变量数据(来自问题陈述),这使事情变得混乱。我会将其更改为 a 之类的东西(就像在 the curve_fit doc 中使用的那样。这不是必需的,但有助于提高可读性。

其次,更重要的是,要拟合的函数必须将自变量(在本例中为t)作为第一个参数。我认为导致平坦拟合的原因是您实际上是在拟合曲线n->Radio(n)(将所有其他变量作为参数)而不是t->Radio(t)

【讨论】:

  • 哇哦!非常感谢哈哈,我该如何选择这个作为答案?
  • @BrandonSeedlessBananasMc-Wil 更新了曲线拟合的潜在修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 2017-08-06
  • 2016-12-24
  • 2019-01-06
  • 2017-03-25
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多