2017-09-27 13 views
2

私は、配列の列の合計値の配列の幅に沿って曲線を、プロットしました:numpyの数値微分

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のバージョン3.x range()
+1

を使用すると、例外が何を意味するのか理解していますか?あなたは、Pythonのバージョン3.xを使用している?? – wwii

+0

ああ。Pythonの3では '範囲(はい、それは私が使用している一つです) ()は、リストではなく、インターレーターを返します。 – Jim421616

+3

エラーの主な原因を修正した後、['numpy.diff'](https://docs.scipy.org/doc/numpy/reference/generated/numpy)を参照してください。 diff.html)which ba似ていますが少し柔軟です。 –

答えて

2

ではなく、リストのrange objectを作成します。どうやらオブジェクトは、算術演算をサポートしていない範囲。代わりにnumpy ndarrayを使用してみてください。

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