[英]numpy numerical differentiation
I've plotted a curve along the width of an array, of the sum of the array columns:我已经沿着数组的宽度绘制了一条曲线,即数组列的总和:
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()
The commented-out function is my attempt at numerically computing the derivative of the curve, but I get a注释掉的函数是我尝试以数值方式计算曲线的导数,但我得到了
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'
The questions here and here aren't quite what I'm trying to solve. 这里和这里的问题并不是我想要解决的问题。 How can I fix my little function to plot the derivative?如何修复我的小函数来绘制导数? Or is there a built-in function to do it?或者是否有内置函数来做到这一点? All of the built-ins (such as scipy.misc.derivative I've found depend on knowing the function you're differentiating.所有内置函数(例如我发现的scipy.misc.derivative都取决于了解您要区分的函数。
In Python v3.x range()
creates a range object instead of a list.在 Python v3.x range()
创建一个范围对象而不是一个列表。 Apparently range objects don't support arithmetic.显然范围对象不支持算术。 Try using a numpy ndarray instead.尝试使用numpy ndarray代替。
x = np.arange(nodisk_data.shape[1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.