【Python載入數據】python極簡教程
python是一種不一定簡潔、但非常明了的語言,可讀性強,雖然依賴的程序包有時候比較多。就天文數據的處理而言,python是非常合適的。之前已經寫過一些python相關的博文(http://blog.sciencenet.cn/blog-117333-679285.html,http://blog.sciencenet.cn/blog-117333-679464.html,http://blog.sciencenet.cn/blog-117333-684226.html,blog.sciencenet.cn/blog-117333-694969.html,http://blog.sciencenet.cn/home.php?mod=space&uid=117333&do=blog&id=695303,http://blog.sciencenet.cn/blog-117333-573394.html,http://blog.sciencenet.cn/blog-117333-574518.html,http://blog.sciencenet.cn/blog-117333-574767.html)。和之前IDL的博文一樣,這篇博文的目的也是起到總結的作用,以后不怎么會開新帖了。
python的各個版本可以在這里找到,http://www.python.org/download/releases/。更多python的程序包可以在一個非官方的python程序庫網站http://www.lfd.uci.edu/~gohlke/pythonlibs/找到。python畫圖程序包matplotlib的相關內容可以參見http://matplotlib.org/。下面總結一些數據處理中經常用到的python命令。
注意:縮進在python里是有意義的,所以寫代碼的時候不能隨便空格,要注意對齊。
1. 讀取各種格式的文件
(1)FITS
>>> import pyfits
>>> hdulist = pyfits.open('xxx.fits') ? # 讀頭文件及數據,hdulist是一個結構體
>>> image = hdulist[0].data ? ? ? ? ? ?# 分離出數據
>>> nx = hdulist[0].header['naxis1'] # 讀取頭文件中相應的參數值
(2)文本文件
>>> import numpy as np
>>> ra,dec,major,minor,angle = np.loadtxt('catalog.txt',unpack=True,usecols=[16,17,18,19,20]) # unpack=True 表明對結果進行轉置,使得ra,dec,major=...的格式是合法的
2. 定義數組
(1)定義一個未賦值數組
>>> import numpy as np
>>> a=np.array(10)
(2)定義一個所有元素為0的數組
>>> import numpy as np
>>> a=np.zeros(10)
>>> b=np.zeros((2,5))
(3)定義一個所有元素為1的數組
>>> import numpy as np
>>> a=np.ones(10)
>>> b=np.ones((2,5))
(4)定義一個指標數組
>>> import numpy as np
>>> a=np.arange(1,11,1)
>>> b=np.arange(1,11,1).reshape(2,5)
3. 計算
(1)傅里葉變換
>>> import numpy as np
>>> a=np.ones(100)
>>> b=np.fft.fftn(a)
>>> c=np.fft.ifftn(b).real
4. 畫圖
(1)積分強度圖
# in intensity_map.py:
import pyfits
import numpy as np
import matplotlib.pyplot as plt
hdulist = pyfits.open('xxx.fits')
image = hdulist[0].data
nz = hdulist[0].header['naxis3']
for i in range(0,nz):
Z = Z+image[i,:,:]
ax = plt.subplot(111)
im = plt.imshow(Z, cmap=cm.gist_yarg,
origin='lower', aspect='equal',
extent=[max(x),min(x),min(y),max(y)])
plt.show()
(2)簡單曲線圖
# in simple_plot.py:
from pylab import *
t=arange(0.0, 2.0, 0.01)
s=sin(2*pi*t)
plot(t,s)
xlabel('time (s)')
ylabel('voltage (mV)')
savefig("test.eps")
show()
5. 查看幫助
>>> help(np.array) #查看np.array函數的定義和用法