python 數據分析----numpy

NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其餘各類工具的基礎.數組

NumPy的主要功能:dom

  • ndarray,一個多維數組結構,高效且節省空間
  • 無需循環對整組數據進行快速運算的數學函數
  • *讀寫磁盤數據的工具以及用於操做內存映射文件的工具
  • *線性代數、隨機數生成和傅里葉變換功能
  • *用於集成C、C++等代碼的工具

安裝方法:pip install numpyide

引用方式:import numpy as np函數

NumPy的主要對象是同質多維數組它是一張表,全部元素(一般是數字)的類型都相同,並經過正整數元組索引.NumPy的數組的類稱爲ndarray別名爲array工具

建立ndarray:性能

  • array() 將列表轉換爲數組,可選擇顯式指定dtype
    In [17]: import numpy as np
    
    In [18]: a = np.array([2,3,4])
    
    In [19]: a
    Out[19]: array([2, 3, 4])
  • arange() range的numpy版,支持浮點數
    In [21]: a = np.arange(10,30,5)
    ##(10 ,30 是指定範圍,5步長,步長支持小數)
    In [22]: a
    Out[22]: array([10, 15, 20, 25])
    
    
    In [23]: a = np.arange(10,30,0.5)
    
    In [24]: a
    Out[24]: 
    array([ 10. ,  10.5,  11. ,  11.5,  12. ,  12.5,  13. ,  13.5,  14. ,
            14.5,  15. ,  15.5,  16. ,  16.5,  17. ,  17.5,  18. ,  18.5,
            19. ,  19.5,  20. ,  20.5,  21. ,  21.5,  22. ,  22.5,  23. ,
            23.5,  24. ,  24.5,  25. ,  25.5,  26. ,  26.5,  27. ,  27.5,
            28. ,  28.5,  29. ,  29.5])
  • linspace() 相似arange(),第三個參數爲數組長度
  • In [25]: a = np.linspace(0,2,9)
    
    ## 將【0,2】分紅九份
    
    In [26]: a
    Out[26]: array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])
  • zeros() 根據指定形狀和dtype建立全0數組
    In [28]: a = np.zeros((3,2),dtype=np.int64)
    #第一個參數是元祖,代表建立個幾行幾列的數據 
    # dtype 表示數據類型
    
    In [29]: a
    Out[29]: 
    array([[0, 0],
           [0, 0],
           [0, 0]])
  • ones() 根據指定形狀和dtype建立全1數組
  • empty() 根據指定形狀和dtype建立空數組(隨機值)(函數empty內容是隨機的而且取決於存儲器的狀態。默認狀況下,建立的數組的dtype爲float64)
  • eye() 根據指定邊長和dtype建立單位矩陣

ndarray基本屬性:spa

  ndarray.ndim
    數組的軸(維度)的個數。在Python世界中,維度的數量被稱爲rank
  ndarray.shape
  數組的維度。這是一個整數的元組,表示每一個維度中數組的大小。對於具備n行和m列的矩陣,shape    將是(n,m)所以,shape元組的長度就是rank或維度的個數ndim
  ndarray.size
  數組元素的總數。這等於shape的元素的乘積。
  ndarray.dtype
  描述數組中元素類型的對象。可使用標準Python類型建立或指定dtype。另外NumPy提供了本身的類型。例如numpy.int3二、numpy.int16和numpy.float64。
  ndarray.itemsize
  數組中每一個元素的字節大小。例如,元素爲float64類型的數組的itemsize爲8(=64/8),而complex32類型的數組的comitemsize爲4(=32/8)。它等於ndarray.dtype.itemsize
  ndarray.data
  該緩衝區包含數組的實際元素。一般,咱們不須要使用此屬性,由於咱們將使用索引訪問數組中的元素。
 基本操做

加減:

數組和標量之間的運算code

  a+1 a*3 1//a a**0.5orm

一樣大小數組之間的運算對象

In [30]: a = np.array([20,30,40,50])

In [31]: b = np.arange(4)

In [32]: a
Out[32]: array([20, 30, 40, 50])

In [33]: b
Out[33]: array([0, 1, 2, 3])

In [34]: c = a - b

In [35]: c
Out[35]: array([20, 29, 38, 47])

乘法運算符*的運算在NumPy數組中是元素級別的。

可使用dot函數或方法執行矩陣乘積:

In [36]: a
Out[36]: array([20, 30, 40, 50])

In [37]: b
Out[37]: array([0, 1, 2, 3])

In [38]: a*b
Out[38]: array([  0,  30,  80, 150])

In [39]: a.dot(b)

Out[39]: 260

###矩陣乘法複習:

 

默認狀況下,這些操做適用於數組,就像它是一個數字列表,而無論其形狀。可是,經過指定axis參數,你能夠沿着數組的指定軸應用操做:

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)                            # sum of each column
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)                            # min of each row
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)                         # cumulative sum along each row(每一個數和這個數以前全部數的和)
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])

通用函數能同時對數組中全部元素進行運算的函數

常見通用函數:

  • 一元函數:abs(絕對值), sqrt(平方), exp, log, ceil, floor, rint, trunc, modf, isnan(判斷是不是nan), isinf(判斷是不是inf), cos, sin, tan
  • 二元函數:add, substract, multiply, divide, power, mod,  maximum, mininum

索引、切片和迭代:

一維數組索引:(和列表幾乎差很少)

In [49]: a
Out[49]: array([20, 30, 40, 50])

In [50]: a[1]
Out[50]: 30

二維/多維數組索引

In [51]: b
Out[51]: 
array([[ 1,  2,  3,  4],
       [10, 11, 12, 13]])

In [52]: b[1][2]
Out[52]: 12

In [53]: b[1,2]. #推薦這種
Out[53]: 12

布爾型索引:將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組

In [59]: b
Out[59]: 
array([[ 1,  2,  3,  4],
       [10, 11, 12, 13]])

In [60]: b<5
Out[60]: 
array([[ True,  True,  True,  True],
       [False, False, False, False]], dtype=bool)

In [61]: b[b<5]
Out[61]: array([1, 2, 3, 4])

花式索引:(索引的值也是索引)

對一個二維數組,選出其第一列和第三列,組成新的二維數組。

In [64]: b
Out[64]: 
array([[ 1,  2,  3,  4],
       [10, 11, 12, 13]])

In [65]: c = b[:,[1,3]] ##(裏面的【1,3】指的是第1和3列)

In [66]: c
Out[66]: 
array([[ 2,  4],
       [11, 13]])

切片:

In [67]: a
Out[67]: array([20, 30, 40, 50])

In [68]: a[1:3]
Out[68]: array([30, 40])


In [71]: b = np.arange(20).reshape(4,5)

In [72]: b
Out[72]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

In [73]: b[1:3]
Out[73]: 
array([[ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

與列表不一樣,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。 【解決方法:copy()

In [74]: a
Out[74]: array([20, 30, 40, 50])

In [75]: c = a[1:3]

In [76]: c
Out[76]: array([30, 40])

In [77]: c[0] = 11

In [78]: c
Out[78]: array([11, 40])

In [79]: a
Out[79]: array([20, 11, 40, 50])

In [80]: c = a[1:3].copy()

In [82]: c
Out[82]: array([11, 40])

In [83]: c[0] = 99

In [84]: c
Out[84]: array([99, 40])

In [85]: a
Out[85]: array([20, 11, 40, 50])

In [122]: b

Out[122]: 

array([[ 0,  1,  2,  3,  4],

       [ 5,  6,  7,  8,  9],

       [10, 11, 12, 13, 14],

       [15, 16, 17, 18, 19]])

 

In [123]: c = b[1:3,1:3]

 

In [124]: c

Out[124]: 

array([[ 6,  7],

       [11, 12]])

經常使用函數:

  • sum 求和
  • mean 求平均數
  • std 求標準差
  • var 求方差
  • min 求最小值
  • max 求最大值
  • argmin 求最小值索引
  • argmax 求最大值索引
  • rand 給定形狀產生隨機數組(0到1之間的數)
  • randint 給定形狀產生隨機整數
  • choice 給定形狀產生隨機選擇
  • shuffle 與random.shuffle相同(從新洗牌,隨機打亂)
  • uniform 給定形狀產生隨機數組
相關文章
相關標籤/搜索