首页 > 解决方案 > 如何使用追加将循环中的计算值放入数组中

问题描述

我正在解决一个问题,我的最终目标是获取岁差数组中的岁差值。这些值是时间与 theta 图的斜率。我使用线性拟合来获得该图的斜率。我尝试使用 append 将该斜率放入数组中。这是为不同的 a 值完成的函数。

但是进动值的数组的长度为 131,它应该只有 24。当代码运行时,代码正在为每个值打印正确的斜率(也就是进动值),但是数组太长了,而且我不知道所有这些价值观是从哪里来的。

我怀疑这是我使用追加/将斜率值放入空数组的方式。我该怎么做才能在数组中获取我需要的值?

基本上我想制作一个在我的函数中创建的图表的不同斜率的数组。当我使用追加时,斜率值(params [0])数组的长度为131,当它应该是24时,其中的值都是错误的。我如何制作斜率数组,每个函数运行的值的斜率?

    amin=0
    amax=0.024
    da=0.001
    a_list=np.arange(amin,amax,da)


    for a in a_list:
        mercury(a)    

        ##finding dtheat/dt 
        precession =[]
        #plot theta vs time

        Theta = [theta]

        Time = [time]
        #dtheta/dt dt=period



        #Fitting a straight line! 
        def linefit(x,m,b):
            return m*x+b
        params, param_cov = optimize.curve_fit(linefit,Time,Theta)
        plt.plot(a_list,params[0]*a_list+params[1],'--r',linewidth=2,label='fit')
        plt.plot(Time,Theta)
        plt.xlabel('Time')
        plt.ylabel('Theta')
        plt.title("time vs theta when alpha = {a}".format(a=a))
        plt.show()
        print('slope is %.3f' % (params[0]))  
        precession.append(params[0])

    plt.plot(a_list, precession)
    plt.show()

标签: python

解决方案


您在每个循环中都重置列表。我把它移到了循环之外。

已编辑:创建新数组以包含参数 [0] 以分隔值...

amin=0
amax=0.024
da=0.001
a_list=np.arange(amin,amax,da)

precession =[] # ADDED HERE
new_array = [] # ADDED HERE
for a in a_list:
    mercury(a)    

    ##finding dtheat/dt 

    #plot theta vs time

    Theta = [theta]

    Time = [time]
    #dtheta/dt dt=period
    for i in theta:
       precession.append(i/0.246)


    #Fitting a straight line! 
    def linefit(x,m,b):
        return m*x+b
    params, param_cov = optimize.curve_fit(linefit,Time,Theta)
    plt.plot(a_list,params[0]*a_list+params[1],'--r',linewidth=2,label='fit')
    plt.plot(Time,Theta)
    plt.xlabel('Time')
    plt.ylabel('Theta')
    plt.title("time vs theta when alpha = {a}".format(a=a))
    plt.show()
    print('slope is %.3f' % (params[0]))  
    new_array.append(params[0]) # ADDED HERE

plt.plot(a_list, precession)
plt.show()

推荐阅读