前兩篇文章對NumPy數組做了基本的介紹,本篇文章對NumPy數組進行較深入的探討。首先介紹自定義類型的數組,接著數組的組合,最后介紹數組復制方面的問題。
自定義結構數組
通過NumPy也可以定義像C語言那樣的結構類型。在NumPy中定義結構的方法如下:
定義結構類型名稱;定義字段名稱,標明字段數據類型。
student= dtype({'names':['name', 'age', 'weight'], 'formats':['S32', 'i','f']}, align = True)
這里student是自定義結構類型的名稱,使用dtype函數創建,在第一個參數中,'names'和'formats'不能改變,names中列出的是結構中字段名稱,formats中列出的是對應字段的數據類型。S32表示32字節長度的字符串,i表示32位的整數,f表示32位長度的浮點數。最后一個參數為True時,表示要求進行內存對齊。
字段中使用NumPy的字符編碼來表示數據類型。更詳細的數據類型見下表。
數據類型 | 字符編碼 |
整數 | i |
無符號整數 | u |
單精度浮點數 | f |
雙精度浮點數 | d |
布爾值 | b |
復數 | D |
字符串 | S |
Unicode | U |
Void | V |
在定義好結構類型之后,就可以定義以該類型為元素的數組了:
a= array([(“Zhang”, 32, 65.5), (“Wang”, 24, 55.2)], dtype =student)
除了在每個元素中依次列出對應字段的數據外,還需要在array函數中最后一個參數指定其所對應的數據類型。
注:例子來源于張若愚的Python科學計算藝術的29頁。更多關于dtype的內容請參考《NumPy for Beginner》一書的第二章。
組合函數
這里介紹以不同的方式組合函數。首先創建兩個數組:
>>> a = arange(9).reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> b = 2 * a >>> b array([[ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
水平組合
>>> hstack((a, b)) array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
也可通過concatenate函數并指定相應的軸來獲得這一效果:
>>> concatenate((a, b), axis=1) array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
新聞熱點
疑難解答