源地址:http://blog.csdn.net/sunny2038/article/details/9002531python
http://blog.csdn.net/sunny2038/article/details/9023797數組
http://blog.csdn.net/sunny2038/article/details/8907736dom
目前個人工做是將NumPy引入到Pyston中(一款Dropbox實現的Python編譯器/解釋器)。在工做過程當中,我深刻接觸了NumPy源碼,瞭解其實現並提交了PR修復NumPy的bug。在與NumPy源碼以及NumPy開發者打交道的過程當中,我發現當今中文NumPy教程大部分都是翻譯或參考英文文檔,所以致使了許多疏漏。好比NumPy數組中的broadcast功能,幾乎全部中文文檔都翻譯爲「廣播」。而NumPy的開發者之一,回覆到「broadcast is a compound -- native English speakers can see that it's " broad" + "cast" = "cast (scatter, distribute) broadly, I guess "cast (scatter, distribute) broadly" probably is closer to the meaning(NumPy中的含義)"。有鑑於此,我打算啓動一個項目,以我對NumPy使用以及源碼層面的瞭解編寫一個系列的教程。函數
地址隨後會更新。CSDN的排版(列表)怎麼顯示不正常了。。。佈局
NumPy數組是一個多維數組對象,稱爲ndarray。其由兩部分組成:ui
大部分操做僅針對於元數據,而不改變底層實際的數據。編碼
關於NumPy數組有幾點必需瞭解的:spa
在詳細介紹NumPy數組以前。先詳細介紹下NumPy數組的基本屬性。NumPy數組的維數稱爲秩(rank),一維數組的秩爲1,二維數組的秩爲2,以此類推。在NumPy中,每個線性的數組稱爲是一個軸(axes),秩實際上是描述軸的數量。好比說,二維數組至關因而兩個一維數組,其中第一個一維數組中每一個元素又是一個一維數組。因此一維數組就是NumPy中的軸(axes),第一個軸至關因而底層數組,第二個軸是底層數組裏的數組。而軸的數量——秩,就是數組的維數。.net
NumPy的數組中比較重要ndarray對象屬性有:翻譯
ndarray.ndim:數組的維數(即數組軸的個數),等於秩。最多見的爲二維數組(矩陣)。
ndarray.shape:數組的維度。爲一個表示數組在每一個維度上大小的整數元組。例如二維數組中,表示數組的「行數」和「列數」。ndarray.shape返回一個元組,這個元組的長度就是維度的數目,即ndim屬性。
ndarray.size:數組元素的總個數,等於shape屬性中元組元素的乘積。
ndarray.dtype:表示數組中元素類型的對象,可以使用標準的Python類型建立或指定dtype。另外也可以使用前一篇文章中介紹的NumPy提供的數據類型。
ndarray.itemsize:數組中每一個元素的字節大小。例如,一個元素類型爲float64的數組itemsiz屬性值爲8(float64佔用64個bits,每一個字節長度爲8,因此64/8,佔用8個字節),又如,一個元素類型爲complex32的數組item屬性爲4(32/8)。
先來介紹建立數組。建立數組的方法有不少。如可使用array函數從常規的Python列表和元組創造數組。所建立的數組類型由原序列中的元素類型推導而來。
使用array函數建立時,參數必須是由方括號括起來的列表,而不能使用多個數值做爲參數調用array。
可以使用雙重序列來表示二維的數組,三重序列表示三維數組,以此類推。
能夠在建立時顯式指定數組中元素的類型
一般,剛開始時數組的元素未知,而數組的大小已知。所以,NumPy提供了一些使用佔位符建立數組的函數。這些函數有助於知足除了數組擴展的須要,同時下降了高昂的運算開銷。
用函數zeros可建立一個全是0的數組,用函數ones可建立一個全爲1的數組,函數empty建立一個內容隨機而且依賴與內存狀態的數組。默認建立的數組類型(dtype)都是float64。
能夠喲娜特d.dtype.itemsize來查看數組中元素佔用的字節數目。
也能夠本身制定數組中元素的類型
NumPy提供一個相似arange的函數返回一個數列形式的數組:
以10開始,差值爲5的等差數列。該函數不只接受整數,還接受浮點參數:
當arange使用浮點數參數時,因爲浮點數精度有限,一般沒法預測得到的元素個數。所以,最好使用函數linspace去接收咱們想要的元素個數來代替用range來指定步長。linespace用法以下,將在通用函數一節中詳細介紹。
數組中的元素是經過下標來訪問的,能夠經過方括號括起一個下標來訪問數組中單一一個元素,也能夠以切片的形式訪問數組中多個元素。關於切片訪問,將在切片一節介紹。
知識點:NumPy中的數據類型
對於科學計算來講,Python中自帶的整型、浮點型和複數類型遠遠不夠,所以NumPy中添加了許多數據類型。以下:
名稱 | 描述 |
bool | 用一個字節存儲的布爾類型(True或False) |
inti | 由所在平臺決定其大小的整數(通常爲int32或int64) |
int8 | 一個字節大小,-128 至 127 |
int16 | 整數,-32768 至 32767 |
int32 | 整數,-2 ** 31 至 2 ** 32 -1 |
int64 | 整數,-2 ** 63 至 2 ** 63 - 1 |
uint8 | 無符號整數,0 至 255 |
uint16 | 無符號整數,0 至 65535 |
uint32 | 無符號整數,0 至 2 ** 32 - 1 |
uint64 | 無符號整數,0 至 2 ** 64 - 1 |
float16 | 半精度浮點數:16位,正負號1位,指數5位,精度10位 |
float32 | 單精度浮點數:32位,正負號1位,指數8位,精度23位 |
float64或float | 雙精度浮點數:64位,正負號1位,指數11位,精度52位 |
complex64 | 複數,分別用兩個32位浮點數表示實部和虛部 |
complex128或complex | 複數,分別用兩個64位浮點數表示實部和虛部 |
NumPy類型轉換方式以下:
許多函數的參數中能夠指定參數的類型,固然,這個類型參數是可選的。以下:
當輸出一個數組時,NumPy以特定的佈局用相似嵌套列表的形式顯示:
reshape將在下一篇文章中介紹
若是一個數組太長,則NumPy自動省略中間部分而只打印兩端的數據:
可經過設置printoptions參數來禁用NumPy的這種行爲並強制打印整個數組。
這樣,輸出時數組的全部元素都會顯示出來。