python - numpy 数值微分

标签 python numpy numerical-methods numerical

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

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'

问题herehere不完全是我想要解决的问题。如何修复我的小函数来绘制导数?或者是否有内置函数可以做到这一点?所有内置函数(例如我发现的 scipy.misc.derivative 都依赖于了解您要区分的函数。

最佳答案

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

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

关于python - numpy 数值微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458456/

相关文章:

python - 将 N 个项目的所有组合生成两个袋子,其中每个项目都在一个或零个袋子中

python - 查找字符串中最常用的字符的最快方法是什么

python - 如果至少有一个值相等,则合并二维数组的行

python - 具有条件的高效 numpy argsort,同时保持原始索引

python - 如何使用用户输入作为数值积分算法的函数?

python - 如何使用 python 中提供的 Runge-Kutta 方法解决以下问题

python - Seaborn 热图轴中的日期

Python:如何将特定数量字符的字符串切片到列表中?

与numpy.filtfilt相当的C#数字过滤器实现

linux - 如何提高Linux集群上计算节点的并行处理速度?