Numpy 入門教程(1)
阿新 • • 發佈:2019-02-12
Numpy 入門教程
NumPy 提供了對多維陣列的支援,與Python原生支援的List型別不同,陣列的所有元素必須同樣的型別。陣列的維度被稱為axes,維數稱為 rank。
Numpy的陣列型別為 ndarray, ndarray 的重要屬性包括:
- ndarray.ndim:陣列的維數,也稱為rank
- ndarray.shape:陣列各維的大小tuple 型別,對一個n 行m 列的矩陣來說, shape 為 (n,m)。
- ndarray.size:元素的總數。
- Ndarray.dtype:每個元素的型別,可以是 numpy.int32, numpy.int16, and numpy.float64
- Ndarray.itemsize:每個元素佔用的位元組數。
- Ndarray.data:指向資料記憶體。
一個簡單的例子:
>>> from numpy import * >>> a = 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) numpy.ndarray >>> b = array([6, 7, 8]) >>> b array([6, 7, 8]) >>> type(b) numpy.ndarray
生成陣列
有許多種方法生成陣列。比如,可以將Python list 或 tuple 轉化為陣列,轉化後的陣列元素的型別由原來的物件的型別來決定。
>>> from numpy import * >>> a = array( [2,3,4] ) >>> a array([2, 3, 4]) >>> a.dtype dtype('int32') >>> b = array([1.2, 3.5, 5.1]) >>> b.dtype dtype('float64') >>> b = array( [ (1.5,2,3), (4,5,6) ] ) >>> b array([[ 1.5, 2. , 3. ], [ 4. , 5. , 6. ]])
生成陣列時也可以指定元素的資料型別:
>>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
通常,我們無法事先知道陣列元素的具體值,但是陣列大小是已知的。 這時可以用下面幾種方法生成陣列。
zeros 函式生成元素全部為0的陣列,ones函式生成元素全部為1的陣列empty函式生成元素沒有賦值的陣列,這時元素值由記憶體中原來的內容決定。 預設的,生成的陣列的元素型別為float64.
>>> zeros( (3,4) )
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>> ones( (2,3,4), dtype=int16 ) # dtype can also be specified
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)
>>> empty( (2,3) )
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
arange 函式生成的陣列的元素按照等比數列排布,類似於 range函式。
>>> arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
linspace 函式有些類似matlab中的同名函式,下面是個例子:
>>> linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>> x = linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points
>>> f = sin(x)
螢幕輸出 Arrays
當用print 列印一個 array時, 輸出結果類似於 lists:
>>> a = arange(6) # 1d array
>>> print a
[0 1 2 3 4 5]
>>>
>>> b = arange(12).reshape(4,3) # 2d array
>>> print b
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
>>>
>>> c = arange(24).reshape(2,3,4) # 3d array
>>> 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]]]
如果陣列過大,顯示時會有一些省略號:
>>> print arange(10000)
[ 0 1 2 ..., 9997 9998 9999]
>>>
>>> print 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]]
如果我們需要顯示完整的陣列,可以如下設定
>>> set_printoptions(threshold='nan')