能今天做好的事就不要等到明天。以夢為馬,學習趁年華。
一、前言
1.1需要掌握的知識
掌握表示、清洗、統(tǒng)計和展示數據的能力

1.2編程工具
使用Anaconda IDE集成開發(fā)工具
需要理解和掌握如下工具的使用
conda
Spyder
IPython
二、Anaconda IDE的基本使用方法
2.1conda
一個工具,用于包管理和環(huán)境管理。
包管理與pip類似,管理Python第三方庫。
環(huán)境管理能夠允許用戶使用不同版本Python,并能靈活切換。
conda將工具、第三方庫、Python版本、conda都當作包,同等對待。
2.2anaconda
一個集合,包括conda、 某版本Python、 一批第三方庫等。
2.3編程工具:Spyder

2.4IPython
它是一個功能強大的交互式shell,適合進行交互式數據可視化和GUI相關應用
IPython的%run命令
%run用于運行.py程序
注意: %run在一個空的命名空間執(zhí)行%
IPython的%魔術命令
? ??? ??

Python與IPython的區(qū)別
Python只是一個解釋器,用戶給一段輸入,則它給一段輸出。
IPython是一個能夠調用核心的Python解釋器的交互式環(huán)境,IPython只是前臺的一個顯示腳本,而對程序的執(zhí)行是由后臺的Python的內核執(zhí)行。
三、Python語言開發(fā)工具選擇
3.1文本工具類IDE介紹
IDLE
Notepad++
Sublime Text
Vim & Emacs
Atom
Komodo Edit
3.1.1IDLE
它是Python自帶的、默認的、常用的入門級編寫工具
適用于Python入門、功能簡單直接、代碼量小的需求

3.1.2Sublime Text
它是專門為程序員開發(fā)的第三方專用編程工具,具有專業(yè)的編程體驗和多種編程風格

3.2集成工具類IDE
PyCharm
Wing
PyDev & Eclipse
Visual Studio
Anaconda & Spyder
Canopy
3.2.1通用類型
Wing
它是公司維護,工具收費的;調試功能豐富;版本控制,版本同步;適合多人共同開發(fā)

Visual Studio & PTVS
它是微軟公司維護,Win環(huán)境為主,調試功能豐富的一款工具

Eclipse & PyDev
它是開源IDE開發(fā)工具,需要具備一定的開發(fā)環(huán)境

PyCharm
社區(qū)版免費簡單,集成度高,適合較復雜工程

3.2.2科學計算&數據分析
Canopy
公司維護,工收費;支持近500個第三方庫;適合科學計算領域應用開發(fā)? ??? ??

Anaconda
開源免費;支持近800個第三方庫

四、Numpy
4.1維度
一組數據的組織形式
一維數據;一維數據由對等關系的有序或無序數據構成,采用線性方式組織。
二維數據:二維數據由多個一維數據構成,是一維數據的組合形式。
多維數據:多維數據由一維或二維數據在新維度上擴展形成。
高維數據:高維數據僅利用最基本的二元關系展示數據間的復雜結構
4.2數據維度的Python表示
一維數組:列表和集合類型

維數據:列表類型
多維數據:列表類型

高維數據:字典類型或數據表示格式JSON、XML和YAML格式

4.3Numpy的數組對象:ndarray
NumPy
NumPy是一個 開源的Python科學計算基礎庫。
一個強大的N維數組對象ndarray
廣播功能函數
整合C/C++/Fortran代碼的工具
線性代數、傅里葉變換、隨機數生成等功能
NumPy是SciPy、Pandas等 數據處理或科學計算庫的基礎。
NumPy的引用
import numpy as np
N維數組對象: ndarray
數組對象可以去掉元素間運算所需的循環(huán),使一維向量更像單個數據。
設置專門的數組對象,經過優(yōu)化,可以提升這類應用的運算速度。
觀察:科學計算中,一個維度所有數據的類型往往相同。
數組對象采用相同的數據類型,有助于節(jié)省運算和存儲空間。
ndarray是一個多維數組對象,由兩部分構成:
實際的數據
描述這些數據的元數據(數據維度、數據類型等)
ndarray數組一般要求所有元素類型相同(同質),數組下標從0開始。
軸(axis):保存數據的維度
秩(rank):軸的數量
ndarray對象的屬性
? ??

ndarray的元素類型
對比: Python語法僅支持整數、浮點數和復數3種類型
科學計算涉及數據較多,對存儲和性能都有較高要求。
對元素類型精細定義,有助于NumPy合理使用存儲空間并優(yōu)化性能。
對元素類型精細定義,有助于程序員對程序規(guī)模有合理評估。
4.4ndarray數組的創(chuàng)建方法
從Python中的列表、元組等 類型創(chuàng)建ndarray數組
使用NumPy中函數創(chuàng)建ndarray數組,如: arange,ones, zeros等。

從字節(jié)流( raw bytes )中創(chuàng)建ndarray數組。
從文件中讀取特定格式,創(chuàng)建ndarray數組。
4.5ndarray數組的操作
索引:獲取數組中特定位置元素的過程
切片:獲取數組元素子集的過程
一維數組的索引和切片
與Python的列表類似
? ??

多維數組的索引和切片


4.6ndarray數組的運算
數組與標量之間的運算作用于數組的每一個元素

4.7總結
數據的維度:一維、二維、多維、高維
ndarray類型屬性創(chuàng)建和變換
數組的索引和切片
數組的運算:一元函數、二元函數
五、NumPy數據存取與函數
5.1保存CSV文件
np.savetxt(fname, array, fmt='%.18e', delimiter=None)
fname:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件。
array:存人文件的數組。
fmt:寫入文件的格式,例如: %d %.2f %.18e。
delimiter:分割字符串,默認是任何空格。

5.2寫入CSV文件
np.loadtxt(fname, dtype=np.float, delimiter=None,unpack=False)
fname:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件。
dtype:數據類型,可選。
delimiter:分割字符串,默認是任何空格。
unpack:如果True, 讀入屬性將分別寫入不同變量。


5.3CSV文件的局限性
CSV只能有效存儲一維和二維數組
np.savetxt() np.loadtxt()只能有效存取一維和二維數組
5.4多維數據的存取
a.tofile(firame, sep='format='%s')
fname:文件、字符串。
sep:數據分割字符串,如果是空串,寫人文件為二進制。
format:寫人數據的格式。


5.5多維數組的讀取
ap.fromfile(fname, dtype=float, count=-1,sep='')
fname:文件、字符串。
dtype:讀取的數據類型。
count:讀入元素個數,-1表示讀入整個文件。
sep:數據分割字符串,如果是空串,寫人文件為二進制。
需要注意:
該方法需要讀取時知道存入文件時數組的維度和元素類型
a.tofileO和np.fromfile(需要配合使用
可以通過元數據文件來存儲額外信息
5.6NumPy的便捷文件存取
np.save(fname, array)或np.savez(fname, array)
fname:文件名,以.npy為擴展名,壓縮擴展名為.npz
array:數組變量
np.load(fname)
5.7NumPy的隨機函數
NumPy的隨機數函數子庫

np.random的隨機數函數


5.8NumPy的統(tǒng)計函數
NumPy直接提供的統(tǒng)計類函數

np.random的統(tǒng)計函數

5.9NumPy的梯度
np.random的梯度函數

梯度:連續(xù)值之間的變化率,即斜率。

5.10總結
5.10.1數據存取

5.10.1隨機函數

5.10.1統(tǒng)計函數

5.10.1梯度函數

六、圖像的手繪效果
6.1圖像庫
PIL庫:PIL, Python Image Library
PIL庫是一個具有強大圖像處理能力的第三方庫
在命令行下的安裝方法: pip install pillow
from PIL import Image
Image是PIL庫中代表一個圖像的類 (對象)

圖像是一個三維數組,維度分別是高度、寬度和像素RGB值。
6.2圖像的變換
讀入圖像后,獲得像素RGB值,修改后保存為新的文件。


6.3圖像的手繪效果實例分析
手繪效果的幾個特征:
黑白灰色
邊界線條較重
相同或相近色彩趨于白色
略有光源效果

6.4圖像的手繪效果實例
6.4.1梯度的重構
利用像素之間的梯度值和虛擬深度值對圖像進行重構
根據灰度變化來模擬人類視覺的明暗程度

6.4.2光源效果
根據灰度變化來模擬人類視覺的遠近程度

●設計一個位于圖像斜上方的虛擬光源
●光源相對于圖像的俯視角為Elevation方位角為Azimuth
●建立光源對個點梯度值的影響函數
●運算出各點的新像素值

6.4.3梯度歸一化

6.4.4圖像生成


希望能夠給對此感興趣的小伙伴有所幫助。