Numpy 是 Python 的一個科學計算包,包含了多元數組以及多元數組的操作
關于Numpy需要知道的幾點:
- NumPy 數組在建立時有固定的大小,不同于Python清單(可以動态增長)。更改ndarray的大小将建立一個新的數組并删除原始資料。
- NumPy 數組中的元素都需要具有相同的資料類型,是以在存儲器中将具有相同的大小。數組的元素如果也是數組(可以是 Python 的原生 array,也可以是 ndarray)的情況下,則構成了多元數組。
- NumPy 數組便于對大量資料進行進階數學和其他類型的操作。通常,這樣的操作比使用Python的内置序列可能更有效和更少的代碼執行。
ndarray的記憶體結構
Numpy 的核心是
ndarray
對象,這個對象封裝了同質資料類型的n維數組。起名
ndarray
的原因就是因為是
n-dimension-array
的簡寫。
我們來看一下
ndarray
如何在記憶體中儲存的:關于數組的描述資訊儲存在一個資料結構中,這個結構引用兩個對象,一塊用于儲存資料的存儲區域和一個用于描述元素類型的
dtype
對象。
資料存儲區域儲存着數組中所有元素的二進制資料,
dtype
對象則知道如何将元素的二進制資料轉換為可用的值。數組的維數、大小等資訊都儲存在
ndarray
數組對象的資料結構中。
strides
中儲存的是當每個軸的下标增加1時,資料存儲區中的指針所增加的位元組數。例如圖中的
strides
為12,4,即第0軸的下标增加1時,資料的位址增加12個位元組:即a[1,0]的位址比a[0,0]的位址要高12個位元組,正好是3個單精度浮點數的總位元組數;第1軸下标增加1時,資料的位址增加4個位元組,正好是單精度浮點數的位元組數。
Numpy數組初始化
可以調用np.array去從list初始化一個數組:
一些内置的建立數組的函數
Numpy數組資料類型
我們可以用dtype來看numpy數組中元素的類型:
使用astype複制數組并轉換資料類型
使用astype将float轉換為int時小數部分被舍棄
使用astype把字元串轉換為數組,如果失敗抛出異常。
astype使用其它數組的資料類型作為參數
Numpy的複制和視圖
當計算和操作數組時,它們的資料有時被複制到新的數組中,有時不複制。這裡我們做個區分。
完全不複制
簡單指派不會建立數組對象或其資料的拷貝。
視圖或淺複制
不同的數組對象可以共享相同的資料。
view
方法建立一個新數組對象,該對象看到相同的資料。與前一種情況不同,新數組的維數更改不會更改原始資料的維數,但是新數組資料更改後,也會影響原始資料。
深複制
copy
方法生成數組及其資料的完整拷貝。
Numpy數組取值和指派
切片
多元數組可以從各個次元同時切片
自由地取值群組合
用條件判定去取值
總結
參考
[numpy指南]http://docs.scipy.org/doc/numpy/reference/
[numpy ndarray詳解]https://danzhuibing.github.io/py_numpy_ndarray.html
[NumPy-快速處理資料]http://old.sebug.net/paper/books/scipydoc/numpy_intro.html