Numpy學習筆記(一)

先決條件

  • 熟悉python,可以參考Python Tutorial或者廖雪峯的官方網站

  • 安裝Python和Numpy

    建議安裝ipython或bpython(推薦),一個強化版本的Python Shell,學習時非常方便.

    後續的代碼均在python3中測試通過。

基礎篇

Numpy的主要對象是同種元素的多維數組,這和Python的列表稍微不同,Python列表的元素類型可以不同。在Numpy中,維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank),比如:

[1, 2, 3]是一個秩爲1 的數組,軸長度爲3;

[[1., 0., 0.],
 [0., 1., 2.]]

數組的秩爲2,第一維的維度爲2,第二維維度爲3.

常用屬性

Numpy的數組類被稱作ndarray,常稱爲數組,ndarray的一些常用屬性有:

  • ndarray.ndim

    返回數組的秩,即數組軸的個數。

  • ndarray.shape

    返回一個元組,該元組包含數組的維度,指示數組在每一維上的維度大小。

  • ndarray.size

    返回數組中的元素個數,等於shape屬性返回的元祖中元素的乘積。

  • ndarray.dtype

    返回數組中元素的類型。

  • ndarray.itemsize

    返回數組每個元素的字節大小

通常我們在程序中導入numpy包的方法如下:

import numpy as np

後續例子都默認使用以上語句導入了numpy。

例子

>>> 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
dtype('int64')
>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<class 'numpy.ndarray'>
>>> b = np.array([1, 2, 3])
>>> b
array([1, 2, 3])
>>> type(b)
<class 'numpy.ndarray'>

以上例子中的arange(), reshape(), array()函數將在後續進行講解,請按照以上代碼進行測試。

創建數組

  • 使用np.array()函數來利用常規的Python列表和元組創建數組,數組元素類型根據原序列的元素來推導

    >>> a = np.array([2, 3, 4])
    >>> a
    array([2, 3, 4])
    >>> a.dtype
    dtype('int64')
    >>> b = np.array([1.1, 1.2, 1.3])
    >>> b.dtype
    dtype('float64')
    >>> c = np.array([[1, 2, 3], [4, 5, 6]])# 創建二維數組
    >>> c
    array([[1, 2, 3],
         [4, 5, 6]])
    >>> c.dtype
    dtype('int64')
    >>> d = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) # 爲數組指定元素類型
    >>> d
    array([[ 1.,  2.,  3.],
         [ 4.,  5.,  6.]], dtype=float32)
    >>> d.dtype
    dtype('float32')
  • numpy中有一些方便的創建常見數組的函數,比如np.ones()創建全爲1的數組,npp.zeros創建全爲0的數組,np.empty()創建內容隨機。這些函數創建的數組元素類型默認爲np.float64

    >>> np.zeros((3, 4))
    array([[ 0.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  0.],
         [ 0.,  0.,  0.,  0.]])
    >>> np.ones((2, 3, 4), dtype=np.float32)
    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=float32)
    >>> np.empty((2, 3))
    array([[  0.00000000e+000,   4.94065646e-324,   9.88131292e-324],
         [  1.48219694e-323,   1.97626258e-323,   2.47032823e-323]])

    注意:使用這幾個函數創建數組時,需指定數組形狀,一元祖形式作爲參數,而不是每一個維度單獨作爲參數,例如,創建一個2 × 3的數組,np.zeros((2, 3)).

  • numpy中有一個類似 python 中range() 的函數,np.arange(),作用和用法和range()一樣,區別是返回一個數組,而不是列表

    >>> np.arange(0, 10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.arange(0, 10, 2)
    array([0, 2, 4, 6, 8])

    np.linspace(start, end, num),將一個區間進行平分,結束節點end將包括在內, 這和np.arange()有點不同, 默認平分爲50個數:

    >>> np.linspace(0, 10, 10)
    array([  0.        ,   1.11111111,   2.22222222,   3.33333333,
           4.44444444,   5.55555556,   6.66666667,   7.77777778,
           8.88888889,  10.        ])
    >>> np.linspace(0, 9, 10)
    array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

    基本運算

    numpy支持所有的算術運算,但都是按元素進行的(elementwise):

    >>> a = np.array([1, 2, 3, 4])
    >>> b = np.array([5, 6, 7, 8])
    >>> c = b - a
    >>> c
    array([4, 4, 4, 4])
    >>> a ** 2
    array([ 1,  4,  9, 16])
    >>> np.sin(a)
    array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 ])
    >>> a < 3
    array([ True,  True, False, False], dtype=bool)

    矩陣的乘法,使用np.dot()來實現

    >>> A = np.array([[1, 1], [1, 0]])
    >>> B = np.array([[1 ,0], [0, 1]])
    >>> np.dot(A, B)
    array([[1, 1],
         [1, 0]])
    >>> A * B
    array([[1, 0],
         [0, 0]])
    

    sum(), max(), min()函數返回數組元素的和、最大值、最小值,同時可以指定在哪一個axis進行運算

    >>> a = np.arange(0,6).reshape(2,3)
    >>> a
    array([[0, 1, 2],
         [3, 4, 5]])
    >>> a.sum()
    15
    >>> a.sum(axis=0) # 在第一個axis上進行運算,在這裏是列
    array([3, 5, 7])
    >>> a.sum(axis=1) # 在第二個axis上,即行
    array([ 3, 12])
    >>> a.max()
    5
    >>> a.max(axis=0)
    array([3, 4, 5])
    >>> a.max(axis=1)
    array([2, 5])
    >>> a.min()
    0
    >>> a.min(axis=0)
    array([0, 1, 2])
    >>> a.min(axis=1)
    array([0, 3])
    >>> 
    

    還有一些比如np.sin(), np.cos(),np.exp()等一些通用函數可進行復雜數學運算。

發佈了35 篇原創文章 · 獲贊 126 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章