numpy庫簡單使用

numpy簡介

NumPy(Numerical Python)是python語言的一個擴展程序庫,支持大量維度數組與矩陣運算,此外,也針對數據運算提供大量的數學函數庫。python

NumPy是高性能科學計算和數據分析的基礎數組

NumPy的主要功能:dom

  • ndarray,一個多維數組結構,高效且節省空間ide

  • 無需循環對整組數據進行快速運算的數學函數函數

  • *讀寫磁盤數據的工具以及用於操做內存映射文件的工具工具

  • *線性代數、隨機數生成和傅里葉變換功能性能

  • *用於集成C、C++等代碼的工具ui

Numpy的安裝

pip install numpy

ndarray-多維數組建立

ndarry是多維數組結構,與列表區別:lua

  • 數組對象內的元素類型必須相同spa

  • 數組大小不可修改

np.array()建立

import numpy as np
np.array()
​
# 建立一維數組
np.array([1,2,3,4,5])
# array([1, 2, 3, 4, 5])
​
# 建立二維數組
np.array([[1,2,3],[4,5,6]])
# array([[1, 2, 3],
       [4, 5, 6]])

注意:

  • numpy默認ndarray的全部元素的類型是相同的

  • 若是傳進列表中包含不一樣的類型,會統一爲一個類型,優先級:str>float>int

np.array([[1,2.2,3],[4,5,6]])  # 整數都會變成浮點數
# array([[1. , 2.2, 3. ],
       [4. , 5. , 6. ]])

np的routines函數建立

  • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差數量數組

np.linspace(1,100,num=20)  # 產生1-100之間數量20個的等差數組
  • np.arange([start, ]stop, [step, ]dtype=None) 等差步長數組

np.arange(0,100,step=2)  # 產生0-100,步長爲2的等差數組
  • random.randint(low,high=None,size=None,dtype="1")

np.random.randint(0,100,size=(4,5))  # size表示維度
# array([[83, 58,  4, 20, 35],
       [13, 33, 30, 14, 79],
       [86, 58, 33, 44, 63],
       [43, 40, 55, 16, 13]])
​
# 固定隨機數組的隨機因子,每次產生固定不變數組
np.random.seed(10)  # 隨機因子/時間種子
np.random.randint(0,100,size=(4,5))

ndarray屬性和方法

經常使用屬性

  • T:數組的轉置(對高維數組而言)

img

  • dtype:數組元素的數據類型

  • size:數組元素的個數

  • ndim:數組的維數

  • shape:數組的維度大小(以元組形式)

 

img_arr = plt.imread('./girl.jpg')  # 打開一張圖片,獲取圖片的矩陣數組
​
# 獲取數組的維度
img_arr.ndim
# 3
​
# 獲取數組的外形
img_arr.shape
# (676, 1202, 3)
​
# 獲取數組的大小
img_arr.size
# 2437656
​
# 獲取數組的數據類型
img_arr.dtype
# dtype('uint8')

經常使用方法

numpy.zeros(dim1,dim2)              建立dim1*dim2的零矩陣
numpy.arange
numpy.eye(n) /numpy.identity(n)     建立n*n單位矩陣
numpy.array([…data…], dtype=float64 )
array.astype(numpy.float64)         更換矩陣的數據形式
array.astype(float)                 更換矩陣的數據形式
array * array                       矩陣點乘
array[a:b]                          切片
array.copy()                        獲得ndarray的副本,而不是視圖
array [a] [b]=array [ a, b ]        二者等價
name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)
data[True,False,…..]                索引,只索取爲True的部分,去掉False部分
經過布爾型索引選取數組中的數據,將老是建立數據的副本。
data[ [4,3,0,6] ]                   索引,將第4,3,0,6行摘取出來,組成新數組
data[-1]=data[data.__len__()-1]
numpy.reshape(a,b)                  將a*b的一維數組排列爲a*b的形式
array([a,b,c,d],[d,e,f,g])          返回一維數組,分別爲[a,d],[b,e],[c,f],[d,g]
array[ [a,b,c,d] ][:,[e,f,g,h] ]=array[ numpy.ix_( [a,b,c,d],[e,f,g,h] ) ]
array.T                             array的轉置
numpy.random.randn(a,b)             生成a*b的隨機數組
numpy.dot(matrix_1,matrix_2)        矩陣乘法
array.transpose( (1,0,2,etc.) )     對於高維數組,轉置須要一個由軸編號組成的元組

ndarray索引和切片、變形

一、數組和標量之間的運算
    a+1    a*3    1//a    a**0.5
二、一樣大小數組之間的運算
    a+b    a/b    a**b
三、數組的索引:
    一維數組:a[5]
    多維數組:
        列表式寫法:a[2][3]
        新式寫法:a[2,3] (推薦)
   數組的切片:
        一維數組:a[5:8]    a[4:]        a[2:10] = 1
        多維數組:a[1:2, 3:4]    a[:,3:5]        a[:,1]
四、強調:與列表不一樣,數組切片時並不會自動複製,在切片數組上的修改會影響原數組。    【解決方法:copy()】

索引

一維數組的索引和列表一致,多維同理

沒法直接索引某一列

arr = np.random.randint(0,100,size=(5,7))
​
arr[1]  # 獲取索引爲1的行
​
arr[[1,2]]  # 獲取索引1,2的行
​
arr[1,2]  # 獲取行索引爲1,列索引爲2的值

切片

一維數組的切片和列表相同,多維同理

# 獲取二維數組前兩行
arr[0:2]  # 默認切片爲行索引
​
# 獲取二維數組前兩行和前兩列
arr[0:2,0:2]

數據反轉

# 將數組的行反轉
arr[::-1]
​
# 將數組的列反轉
arr[:,::-1]
​
# 所有反轉
arr[::-1,::-1]

變形

ndarray數組可使用arr.reshape()函數,注意參數是一個tuple

多維數組和一維數組之間的轉換

arr = np.random.randint(0,100,size=(4,6))
arr.shape
​
# 二維變一維
arr_1 = arr.reshape(24)
arr_2 = arr.reshape((1,24))
​
# 一維變多維
arr_3 = arr_1.reshape((3,8))
arr_4 = arr_1.reshape
​
arr_5 = arr_1.reshape((4,-1))  # -1表示自動計算
​
# 多維轉多維
arr_6 = arr.reshape((3,8))

注意:

  • 在變形的過程當中,數組的維度乘積必須是一致的,如4*6 能夠變形爲2*12,也能夠變爲8*3,1*24

級聯

np.concatenate()

對多個numpy數組進行橫向或者縱向的拼接

1.一維、二維、多維數組的級聯,實際操做中級聯爲二維數組

np.concatenate((arr,arr),axis=0)  # axis表明軸向,0表示咧,1表示行

2.合併照片

# 利用咱們剛纔打開的照片數組
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)  # 水平拼接三個數組
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)  # 垂直拼接上面拼接的圖片
plt.imshow(arr_9)  # 最終展現爲9宮格的圖片

ndarray布爾類型索引

問題:給一個數組,選出數組中全部大於5的數。

  • 答案:a[a>5] 原理: a>5會對a中的每個元素進行判斷,返回一個布爾數組 布爾型索引:將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組

問題2:給一個數組,選出數組中全部大於5的偶數。

問題3:給一個數組,選出數組中全部大於5的數和偶數。

  • 答案: a[(a>5) & (a%20)] a[(a>5) | (a%20)]

import numpy as np
a = np.array([1,2,3,4,5,4,7,8,9,10])
a[a>5&(a%2==0)]  # 注意加括號,不叫括號錯誤,以下
# array([ 1,  2,  3,  4,  5,  4,  7,  8,  9, 10])
​
a[(a>5)&(a%2==0)]
# array([ 8, 10])

ndarray聚合函數

  • numpy.sum():求和函數

  • numpy.max()/min():最大值/最小值

  • numpy.mean():平均值

  • cumsum:求前綴和

  • std:求標準差

  • var:求方差

  • argmin:求最小值索引

  • argmax:求最大值索引

arr.sum(axis=1)  # 列向求和
arr.max(axis=1)  # 列向最大值
arr.mean(axis=1)  # 列向平均值

其餘聚合函數

  • Function Name NaN-safe Version Description

  • np.sum np.nansum Compute sum of elements

  • np.prod np.nanprod Compute product of elements

  • np.mean np.nanmean Compute mean of elements

  • np.std np.nanstd Compute standard deviation

  • np.var np.nanvar Compute variance

  • np.min np.nanmin Find minimum value

  • np.max np.nanmax Find maximum value

  • np.argmin np.nanargmin Find index of minimum value

  • np.argmax np.nanargmax Find index of maximum value

  • np.median np.nanmedian Compute median of elements

  • np.percentile np.nanpercentile Compute rank-based statistics of elements

  • np.any N/A Evaluate whether any elements are true

  • np.all N/A Evaluate whether all elements are true

  • np.power 冪運算

ndarray排序

numpy.sort()和ndarray.sort()均可以排序,稍有區別

numpy.sort(arr,axis=0)  # 返回一個新的排序好的對象,arr並無改變
​
arr.sort(axis=0)  # arr直接被改變了
相關文章
相關標籤/搜索