代码之家  ›  专栏  ›  技术社区  ›  Jim421616

numpy数值微分

  •  2
  • Jim421616  · 技术社区  · 7 年前

    我沿着数组的宽度绘制了一条曲线,即数组列的总和:

    import numpy as np
    from astropy.io import fits
    import matplotlib.pyplot as plt
    
    #def plot_slope(x, y):
    #    xs = x[1:] - x[:-1]
    #    ys = y[1:] - y[:-1]
    #    plt.plot(x[1:], ys / xs)
    
    hdulist = fits.open('w1_subtracted_2_deg.fits')
    nodisk_data, nodisk_header = hdulist[0].data, hdulist[0].header
    
    x = range(nodisk_data.shape[1])
    y = np.sum(nodisk_data, axis = 0)
    xticks = [0, 183, 365, 547, 729, 912, 1095, 1277, 1459]
    long_marks = [24, 18, 12, 6, 0, 354, 348, 342, 335]
    
    ax = plt.axes()
    ax.set_xticks(xticks)
    ax.set_xticklabels(long_marks)
    
    plt.plot(x, y, linewidth = 0.5, color = 'red')
    #plot_slope(x, y)
    plt.title('Longitudinal sum of flux density per steradian')
    plt.xlabel(r'Galactic longitude, $\ell$')
    plt.ylabel(r'Summed flux density per steradian, $MJ.sr^{-1}$')
    plt.grid(True)
    plt.show()
    
    plt.savefig('add_cols.png')
    
    hdulist.close()
    

    注释掉的函数是我试图数值计算曲线的导数,但我得到了一个

      File "C:/Users/Jeremy/Dropbox/Astro480/NEOWISE/add_cols.py", line 6, in plot_slope
        xs = x[1:] - x[:-1]
    
    TypeError: unsupported operand type(s) for -: 'range' and 'range'
    

    问题 here here scipy.misc.derivative 我发现这取决于你要区分的函数。

    1 回复  |  直到 7 年前
        1
  •  2
  •   wwii    7 年前

    在Python v3中。x range() 创建 range object 而不是列表。显然,范围对象不支持算术。尝试使用 numpy ndarray 相反

    x = np.arange(nodisk_data.shape[1])