課程主要內容:經常使用IDE:
本課程主要使用:Anacondahtml
Anaconda:一個集合,包括conda、某版本Python、一批第三方庫等python
-支持近800個第三方庫c++
-適合科學計算領域程序員
-包含多個主流工具正則表達式
-開源免費shell
-跨平臺編程
自己不是個ide 是將多個工具集成在一塊兒的json
condaubuntu
-一個工具,用於包管理和環境管理數組
-包管理與pip相似,管理Python第三方庫
-環境管理可以容許用戶使用不一樣版本的Python,並能靈活切換
conda將工具、第三方庫、Python版本、conda都看成包,同等對待
conda有命令行工具
C:\Users\king\Anaconda3\Scripts\conda.exe –version 能夠查看conda版本
conda update conda 升級conda
剛開始的是命令行,如今也集成爲GUI,anaconda默認生成root的環境空間編程工具:spyder
默認不舒服 改下
交互式編程環境:IPython
-是一個功能強大的交互式shell
-適合進行交互式數據可視化和GUI相關應用
IPython幾個技巧
?:能夠在變量或者函數前面加?得到通用信息
%run :能夠執行.py程序 注意:%run在一個空的命名空間執行%
trouble shooting:
在ubuntu18中安裝了anaconda3,啓動spyder報錯Segmentation fault (core dumped)
安裝conda install pyopengl 而後再啓動 卡住半天沒了 出現killed報錯 我日 而後升級了下anaconda3到最新纔好了
數據的維度
一維數據 列表、集合
二維數據 表格是經典的二維數據 用列表表示
多維數據 二維數據在更多維度上展開 好比時間維度 用列表表示
高維數據 僅使用最基本的二元關係展現複雜關係 key-value形式組織數據 用字典類型或者其餘json、xmal、yaml等
NumPy的數組對象:ndarray
NumPy是一個開源的Python科學計算基礎庫
-一個強大的N維數組對象ndarray
-廣播函數功能
-整合c/c++/fortran代碼的工具
-線性代數、傅里葉變換、隨機數生成等功能
NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎
使用 import numpy as np
ndarray是一個多維數組,由兩部分組成,要求數組元素類型相同,數組下標從0開始
-元數據(數據維度,數據類型等)
-實際數據
np.array() –ndarray別名是array
軸(axis):保存數據的維度
秩(rank):軸的數量例子:
裏面的int32不是Python基礎類型,是NumPy定義的類型,更多類型以下:
爲啥要這麼多數據類型?
-科學計算涉及大量數據,對性能和存儲都有較高要求
-對元素類型精細定義,有助於numpy合理使用存儲空間並優化性能,有助於程序員對程序規模由合理評估
ndarray數組也能夠由非同質對象構成
非同質ndarray元素爲對象類型
非同質ndarray數組沒法發揮numpy優點,儘可能避免使用
ndarray數組的建立和變換
1) 從python列表元組等類型建立數組
x = np.array(list/tuple)
x = np.array(list/tuple,dtype=np.float32) 不指定類型的時候numpy自動關聯一個合適的除了arange函數,其餘都是浮點數
ndarray數組的變換:維度變換、元素類型變換
ndarray數組向列表變換
ls = a.tolist()
ndarray數組的操做
索引和切片
ndarray一維數組的索引和列表同樣
ndarray數組的運算
數組與標量的運算等於每一個元素都和這個標量算一下
maximum等通過運算存在數據類型隱式轉換
數據的csv文件存取
csv只能存儲讀取一維和二維數據,這是它的侷限
多維數據的存取
對於ndarray數組 有個方法 a.tofile(frame,sep=’’,format=’%s’)
-frame 文件、字符串 sep:數據分隔符,若是是空串,寫入文件爲二進制 format:寫入數據的格式
能夠保存爲二進制,小些,可是沒法人類讀懂,若是知道是這樣寫的,能夠還原,做爲一種保存數據的方法
如何還原呢,np.fromfile(frame,dtype=float,count=-1,sep=’’)
-dtype:讀取的數據類型 count:讀入元素的個數-1表示所有
使用這個方法須要知道存入文件時候的數組維度和元素類型,就是元數據,因此fromfile和tofile須要配合使用,能夠將元數據另外存儲解決
NumPy的便捷文件存取
np.save(fname,array)或者np.savez(fname,array)
-fname:文件名以.npy或者.npz
np.load(fname)
NumPy的隨機數函數
NumPy的random子庫 np.random.*NumPy的統計函數
NumPy的梯度函數
圖像的數組表示
RGB色彩表示
PIL庫 處理圖像的第三方庫 pip install pillow from PIL import Image
Image是PIL庫中表明圖像的類(對象)
圖像是一個由像素組成的二維矩陣,每一個元素是一個RGB值圖像的變換
圖像的手繪實例
手繪特徵:黑白灰色、邊界線條較重、相同或者相近色彩趨於白色、略有光源效果
from PIL import Image import numpy as np a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float') depth = 10. # (0-100) grad = np.gradient(a) #取圖像灰度的梯度值 grad_x, grad_y = grad #分別取橫縱圖像梯度值 grad_x = grad_x*depth/100. grad_y = grad_y*depth/100. A = np.sqrt(grad_x**2 + grad_y**2 + 1.) uni_x = grad_x/A uni_y = grad_y/A uni_z = 1./A vec_el = np.pi/2.2 # 光源的俯視角度,弧度值 vec_az = np.pi/4. # 光源的方位角度,弧度值 dx = np.cos(vec_el)*np.cos(vec_az) #光源對x 軸的影響 dy = np.cos(vec_el)*np.sin(vec_az) #光源對y 軸的影響 dz = np.sin(vec_el) #光源對z 軸的影響 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源歸一化 b = b.clip(0,255) im = Image.fromarray(b.astype('uint8')) #重構圖像 im.save('./beijingHD.jpg')
由各類數據可視化類組成,內部結構複雜,是受matlab啓發
matplotlib.pyplot是繪製各種可視化圖形的命令子庫,至關於快捷方式
import matplotlib.pyplot as plt
plt.savefig(‘test’,dpi=600) #保存爲png文件
繪製多個圖形,分區域plt.subplot(3,2,4)
pylot的plot函數
plt.plot(x,y,format_string,**kwargs)
-format_string 表示曲線的格式字符串 **kwargs表示第二組或更多(x,y,format_string) 當繪製多條曲線x不能省略,當繪製一條時候能夠省略x用索引值format_string由顏色字符、風格字符、標記字符組成
pyplot的中文顯示
方法1:修改繪製區域的所有字體方法2:
pylot的文本顯示
首先字符串前邊的r表明是原始字符串,也就是裏邊的內容不須要轉移,這個通常在正則表達式的時候也這麼用,而這裏是laText的用法,在python中使用laText,須要在文本的先後加上$符號,也就是你所用的那樣,而後就是laText的文本了,當你輸入了以上內容,matplotlib會自動爲你解析的,\pi表明的就是π
pylot子繪圖區域
這種方法每次都要寫(3,3),用另一種方法GridSpec類
pylot餅圖繪製
pylot直方圖繪製
pylot極座標繪製
pyplot散點圖繪製
面向對象的繪製方法是matplotlib庫的推薦方法,pillow庫的函數變爲對象的方法
http://python123.io/dv/grawave.html 引力波數據源
import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile rate_h, hstrain= wavfile.read(r"H1_Strain.wav","rb") rate_l, lstrain= wavfile.read(r"L1_Strain.wav","rb") #reftime, ref_H1 = np.genfromtxt('GW150914_4_NR_waveform_template.txt').transpose() reftime, ref_H1 = np.genfromtxt('wf_template.txt').transpose() #使用python123.io下載文件 htime_interval = 1/rate_h ltime_interval = 1/rate_l fig = plt.figure(figsize=(12, 6)) # 丟失信號起始點 htime_len = hstrain.shape[0]/rate_h htime = np.arange(-htime_len/2, htime_len/2 , htime_interval) plth = fig.add_subplot(221) plth.plot(htime, hstrain, 'y') plth.set_xlabel('Time (seconds)') plth.set_ylabel('H1 Strain') plth.set_title('H1 Strain') ltime_len = lstrain.shape[0]/rate_l ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval) pltl = fig.add_subplot(222) pltl.plot(ltime, lstrain, 'g') pltl.set_xlabel('Time (seconds)') pltl.set_ylabel('L1 Strain') pltl.set_title('L1 Strain') pltref = fig.add_subplot(212) pltref.plot(reftime, ref_H1) pltref.set_xlabel('Time (seconds)') pltref.set_ylabel('Template Strain') pltref.set_title('Template') fig.tight_layout() plt.savefig("Gravitational_Waves_Original.png") plt.show() plt.close(fig)
結果
Pandas提供高性能易用數據類型和分析工具
import pandas as pdPandas庫的Series類型 –一維
也支持自定義索引
b.index b.values 得到索引和數據 相似ndarray和字典
兩套索引並存 可是不能混用Series類型也與字典類型相似 能夠in, get()
Pandas庫的DataFrame類型 –二維
由共用相同索引的一組列組成,實際上就是一個表格
是一個表格型的數據類型,每列值類型能夠不一樣
既有行索引也有列索引
經常使用於表達二維數據,單能夠表達多維數據
DataFrame基本操做相似Series,根據行列索引
Pandas庫的數據數據類型操做
如何改變結構呢 增長 或重排:從新索引 刪除:drop索引是不可修改類型 索引的操做就是對數據的操做 numpy不存在索引 必須經過維度來操做
Series只有0軸 DataFrame由0軸 1軸,drop默認操做0軸
Pandas庫的數據類型運算
算術類型運算比較運算
數據和索引創建關聯關係 達到操做索引就是操做數據
數據的排序
能夠對索引排序
也能夠對數據排序基本的統計分析函數
累計統計分析
滾動計算(窗口計算)
數據的相關分析