1. 程式人生 > >Numpy 入門教程(1)

Numpy 入門教程(1)

Numpy 入門教程

NumPy 提供了對多維陣列的支援,與Python原生支援的List型別不同,陣列的所有元素必須同樣的型別。陣列的維度被稱為axes,維數稱為 rank。 

Numpy的陣列型別為 ndarray, ndarray 的重要屬性包括

  • ndarray.ndim:陣列的維數,也稱為rank
  • ndarray.shape:陣列各維的大小tuple 型別,對一個列的矩陣來說, 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')