np.where的使用不正确

时间:2017-12-22 06:12:14

标签: python arrays python-2.7 numpy

所以我试图通过使用两个步长来计算错误,一个尺寸是另一个尺寸的两倍。我设置了两个温度阵列,使用两种不同的步长计算。当我注意到在我的循环中我称之为在时间= 5分钟时打印温度值时,我的错误值得疯狂,我写错了。如果我将它替换为任何数字,它会打印相同的值。是np.where(t = 5)在这种情况下使用不正确?对于每个不同的步长,产生的曲线具有对应于每次的温度值。我希望能够打印时间步长的值及其相应的错误。

> auto.arima(ts,trace=T)

 ARIMA(2,0,2) with non-zero mean : Inf
 ARIMA(0,0,0) with non-zero mean : 365.0674
 ARIMA(1,0,0) with non-zero mean : 367.4462
 ARIMA(0,0,1) with non-zero mean : 367.4406 <<- (I Need to get this)
 ARIMA(0,0,0) with zero mean     : 381.969
 ARIMA(1,0,0) with non-zero mean : 367.4462
 ARIMA(0,0,1) with non-zero mean : 367.4406
 ARIMA(1,0,1) with non-zero mean : 369.1222

 Best model: ARIMA(0,0,0) with non-zero mean 

1 个答案:

答案 0 :(得分:0)

首先,在dt间隔的相同温度上循环,然后加倍dt是没有意义的。与尝试in your previous post的分析解决方案进行比较更有意义。

要在某个温度下打印结果的值,您可以 - 在您知道该值实际位于数组内的条件下 - 按条件索引数组。

E.g。

t = np.array([1,55,77])
x = np.array([1,2,3])
print x[t == 55]

在这种情况下:

import numpy as np 

r = 0.024 #cooling rate per minute
te_init = 90.0
te_surr = 17

def f(te):
    return -r*(te - te_surr) # the derivative

dt_values = [0.05, 0.025, 0.01, 0.005]

for dt in dt_values:
    t = np.arange(0,100,dt) #time
    te = np.zeros(len(t)) #temperature array
    te[0] = te_init 

    for i in range(1,len(t)): #eulers method for computing temperature 
        p1=f(te[i-1])
        p2 =f(te[i-1]+dt*p1)
        te[i] = te[i-1] + (p1 + p2)*(dt/2) 
        te_ana = te_surr - (te_surr - te_init)*np.exp(-r*t)

    print dt, 
    print te[t==10] - te_ana[t==10]