Numpy基礎與陣列建立
阿新 • • 發佈:2018-12-20
Numpy基礎
NumPy的主要物件是存放同類型元素的多維陣列,即所有的元素都是一種型別、通過一個正整數元組索引(通常元素是數字)。
例如,3維空間中一個點的座標為[1, 2, 3],就是一個秩為1的陣列,它只有一個軸,軸長度為3. 又如,在以下例子中,陣列的秩為2(有兩個維度), 第一個維度長度為2, 第二個維度長度為3.
[[ 1., 0., 0.],
[ 0., 1., 2.]]
NumPy的陣列類被稱作ndarray,簡稱為陣列。
注意numpy.array和標準Python庫類array.array並不相同,後者只處理一維陣列和提供少量功能。更多ndarray物件屬性有:
- ndarray.ndim: 陣列軸的個數,在python的世界中,軸的個數被稱作秩。
- ndarray.shape: 指示陣列在每個維度上大小的整數元組。例如一個n行m列的矩陣,它的shape屬性將是(n,m)。
- ndarray.size: 陣列元素的總個數,等於shape屬性元組中元素的乘積。
- ndarray.dtype: 描述陣列中元素型別。
- ndarray.itemsize: 陣列中每個元素的位元組大小。
例:
>>> import numpy as np >>> a = np.arange(15).reshape(3,5) >>> a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>> a.shape (3, 5) >>> a.ndim 2 >>> a.dtype.name 'int32' >>> a.itemsize 4 >>> a.size 15 >>> type(a) <class 'numpy.ndarray'> >>> b = np.array([6,7,8]) >>> b array([6, 7, 8]) >>> type(b) <class 'numpy.ndarray'>
建立陣列
提供多種建立陣列的方法。
>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b = np.array([1.2,3.5,5.1])
>>> b.dtype
dtype('float64')
陣列將兩層序列巢狀轉化成二維的陣列,三層序列巢狀轉化成三維陣列。陣列型別可以在建立時顯示指定。
>>> b = np.array([(1.5,2,3),(4,5,6)]) >>> b array([[ 1.5, 2. , 3. ], [ 4. , 5. , 6. ]]) >>> c = np.array([[1,2],[3,4]],dtype=complex) >>> c array([[ 1.+0.j, 2.+0.j], [ 3.+0.j, 4.+0.j]])
通常,初始化時只能確定陣列的大小,具體元素未知。因此,NumPy提供了使用佔位符建立陣列的函式。
函式 zeros() 建立全 0 陣列,函式 ones() 建立全 1 陣列,函式 empty() 建立一個內容隨機陣列。
>>> np.zeros((3,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> np.ones((2,3,4),dtype='int16')
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)
>>> np.empty((2,3))
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
建立一個數列,NumPy提供一個類似arange的函式返回陣列:
>>> np.arange(10,30,5)
array([10, 15, 20, 25])
>>> np.arange(0,2,0.3)
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
列印陣列
當你列印一個數組,NumPy以類似巢狀列表的形式顯示它,但是呈以下佈局:
一維陣列被列印成行,二維陣列成矩陣,三維陣列成矩陣列表。
>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5]
>>> b = np.arange(12).reshape(4,3)
>>> print(b)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
>>> c = np.arange(24).reshape(2,3,4)
>>> print(c)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
如果一個數組太大了,NumPy自動省略中間部分而只打印頭尾。
>>> print(np.arange(10000))
[ 0 1 2 ..., 9997 9998 9999]
>>> print(np.arange(10000).reshape(100,100))
[[ 0 1 2 ..., 97 98 99]
[ 100 101 102 ..., 197 198 199]
[ 200 201 202 ..., 297 298 299]
...,
[9700 9701 9702 ..., 9797 9798 9799]
[9800 9801 9802 ..., 9897 9898 9899]
[9900 9901 9902 ..., 9997 9998 9999]]
禁用NumPy的這種行為並強制列印整個陣列,可以設定 printoptions引數來更改列印選項。
>>> set_printoptions(threshold='nan')
參考自微信公眾號:機器學習演算法與Python學習,收藏 | Numpy詳細教程,2018年11月26日。