【问题标题】:scipy.optimize.curve_fit: not a proper array of floats error/object too deep for desired arrayscipy.optimize.curve_fit:不是正确的浮点数组错误/对象对于所需数组来说太深
【发布时间】:2019-10-19 04:48:34
【问题描述】:

我正在尝试使用曲线拟合来拟合将频率数组作为 x 值的函数。我不断收到此错误,并试图重塑并使我的 y 值浮动。由于我不断收到错误消息,因此不太确定从哪里开始。

r_0 = (n_0 - n_1)/(n_0 + n_1)
r_1 = (n_1 - n_0)/(n_1+ n_0)
t_1 = 1 + r_1
t_0 = 1 + r_0
freq_values = np.linspace(108,200,1000)

#function to fit to
def T(freq,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*1.528*ghz*10**9)/(3*10**8))   
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return Transmittance

x = freq_values
y = T(freq_values)
yy= np.reshape(y, len(y))
yyy= np.array(yy.real, dtype=float)

plt.plot(x,y, 'r', label = 'calculated')
#fit function, want to match/find optimized n value
def TT(freq,n,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*n*ghz*10**9)/(3*10**8))
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return Transmittance

popt, pcov = curve_fit(TT, x, yyy)         #ydata = power (transmission) data
plt.plot(x, TT(x, *popt), 'b', label = 'fit')

plt.legend(loc='upper right')

我希望代码或拟合与原始图匹配,但在 curve_fit(TT,x,yyy) 中不断收到 yyy 错误

【问题讨论】:

  • n_0 和 n_1 的值是多少?
  • n_0 = 1 和 n_1 = 1.528
  • TT 正在返回一个数组列表。它应该只是一个 numpy 数组,而不是一个 numpy 数组列表。
  • 调试有帮助:完整的错误回溯、xyyy 的形状和 dtype,以及 TT 产生的内容的描述(数组列表?)。 curve_fit 可能会尝试将TT 输出转换为数组np.array(TT(...))。那是什么?

标签: python numpy scipy


【解决方案1】:

有问题的代码块已被修改为在下面工作。请注意函数返回的内容之间的区别。另外,我怀疑你需要提供一个很好的初步猜测。

def TT(freq,n,ghz=[]):
    Transmittance = []
    for ghz in freq_values:
        X_01 = np.exp((2j*np.pi*0.004724*n*ghz*10**9)/(3*10**8))
        H_1 = X_01 + r_0*r_1*(X_01)**-1
        T = (t_0*t_1)/(H_1)
        hola = list(T.flat)
        Transmittance.append(hola*np.conj(hola))
    return np.real(np.array(Transmittance)[:,0])

【讨论】:

    猜你喜欢
    • 2017-01-21
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多