numpy 介紹和基礎使用詳解


NUMPY INTRODUCTION

NUMPY 提供了一個在Python中做科學計算的基礎庫,重在數值計算,主要用於處理多維數組,用於儲存和處理大型矩陣,本身是由C語言開發,比python自身的列表結構要高效的多。

高性能科學計算和數據分析的基礎包,總結:

NUMPY是一個Python科學計算基礎庫,提供了多維向量

NUMPY提供了用於數組快速操作的方法,數學,邏輯,排序,選擇,線性代數,統計等

NUMPY采用預編譯的C代碼完成,效率更高

 

安裝:
pip install numpy
使用:
import numpy as np
行業慣例將np作為numpy,將pd作為pandas。下文所有np均指的是numpy
 

認識軸:

 
軸【axis】:
 既然是多維數組,先理清一下軸,類似於我們學習的X、Y、Z

二維數組的軸:

                                       圖一
 

三維數組的軸:

                                                    圖二

使用NUMPY創建數組:

例:創建一個圖一的數組
 
1 2 3
4 5 6

方法1:    np.array([])

a=np.array([[1,2,3],[4,5,6]])
 
b=np.array([range(1,4),range(4,7)])
 
c=np.array([[i for i in range(1,4)],[i for i in range(4,7)]]) 
[[1 2 3]
[4 5 6]]

方法2:    np.arange()

 
#1~6 步數為1
d=np.arange(1,7,1)
[1,2,3,4,5,6]
 
#將一維數組轉變為二維
d=d.reshape(2,3)
[[1 2 3]
[4 5 6]]
 

常用屬性和方法

形狀

ndarray.shape   

 

重新改變數組形狀

ndarray.reshape(x_dim, y_dim, z_dim,…)

 

數組的維度

ndarray.ndim  

 

itemsize輸出array元素的字節數

numpy.itemsize

數組的形狀:

nparray.shape:
#查看數組的形狀維度
d=np.arange(1,7,1)
print(d.shape)
(6,)
nparray.reshape:
#改變數組的維度,規則1*6==2*3
d=d.reshape(2,3). #或者: d=np.reshape(d,(2,3))
print(d.shape)
(2, 3)
 
獲取數組的維度,可使用len(nparray.shape),即元祖的維度,即 numpy.itemsize
 
將多維數組轉換為一維數組方式:
自己動手:
def createOnenp(nparray):
    num=1
    for i in len(nparray.shape):
        num=num*nparray.shape[i]
    return nparray.reshape(num)
實際又是自己在造輪子,可使用np自帶方法:
nparray= nparray.flatten()
a=np.array([[1,2,3],[4,5,6]])
print(a)
a=a.flatten()
print(a)
[[1 2 3]
[4 5 6]]
 
[1 2 3 4 5 6]
 

數組的計算:

情況一:數組和數值直接運算

a=np.array([i for i in range(1,7)])#生產一維數組
a=a.reshpe(2,3)
[[1 2 3]
[4 5 6]]
數組可以直接與數字進行四則運算(+、-、*、/)
即數組里的每一個值分別四則運算
print(a+2)
[[3 4 5]
[6 7 8]]
print(a/0)
[[inf inf inf]
[inf inf inf]]
在numpy中,/0並不會報錯,
inf(infimum)表示無窮,
nan(not a number)代表未定義或不可表示的值,
 

情況二:數組與數組計算

這里要注意了,數組和數組的計算和矩陣是不同的
 
 
矩陣的乘積:
數組的乘積:
相同的多維數組或直接與單維度軸相同,可以直接四則運算:

方式:廣播(broadcast

 
 
 
a:
[[1 2 3]
[4 5 6]]
print(a*a)
[[ 1  4  9]
[16 25 36]]
b:
[1 2 3]
print(a*b)
[[ 1  4  9]
[ 4 10 18]]
c:
[[1]
[2]]
print(a*c)
[[ 1  2  3]
[ 8 10 12]]
 
 

數組的操作:

1、轉置操作

a=np.array([i for i in range(1,7)])#生產一維數組
a=a.reshpe(2,3)
[[1 2 3]
[4 5 6]]
  •     a.T
[[1 4]
[2 5]
[3 6]]
  • a.transpose()
[[1 4]
[2 5]
[3 6]]
  • a.swapaxes(1,0)    #交換0軸和1軸
[[1 4]
[2 5]
[3 6]]

2、切片

a=np.array([i for i in range(1,10)])#生產一維數組
a=a.reshpe(3,3)
[[1 2 3]
[4 5 6]
[7 8 9]]

2.1取行

2.1.1、取第x行  
print(a[x])
print(a[1])
[4 5 6]
2.1.2、取多行
print(a[[x,x]])
print(a[[0,2]])#取第一行和第三行
[[1 2 3]
[7 8 9]]
2.1.3、取連續多行
print(a[x:y:z]) #連續取從x行到y行,不包括y,間隔為z
print(a[0:3])#取第一行到第四行不包括第四行,也就是前面三行,和list切片類似,左閉右開
[[1 2 3]
[4 5 6]
[7 8 9]]
print(a[0:3:2])
[[1 2 3]
[7 8 9]]

2.2取列

和取行類似
a[:,x]#取x列
a[:,x:y]#取下標為x到下標為y-1的列
a[:,x:y:z]#取下標為x到下標為y-1,間隔為z的列
a[:,[x,y]] #取下標為x,y的兩列

2.3取某一點

a[1,1]=a[1][1]
5

2.4取某一部分

print(a[1:3,1:3])
[[5 6]
[8 9]]
 

布爾索引、三元運算、裁剪

a=np.array([i for i in range(1,10)])#生產一維數組
a=a.reshpe(3,3)
[[1 2 3]
[4 5 6]
[7 8 9]]

布爾索引:

print(a>5)
[[False False False]
[False False  True]
[ True  True  True]]
print(a[a>5])
[6 7 8 9]
a[a>5]=5
print(a)
[[1 2 3]
[4 5 5]
[5 5 5]]

三元運算:

data1=np.where(a<5,1,9)#比5小的全部修改為1,其他的改為9
Print(data1)
[[1 1 1]
[1 9 9]
[9 9 9]]
 
裁剪
data2=a.clip(3,7)#小於3的替換為3,大於7的替換為7
print(data2)
[[3 3 3]
[4 5 6]
[7 7 7]]

常用的統計函數

求和:nparray.sum(axis=None)
均值:nparray.mean(axis=None) 受離群點的影響較大
中值:np.median(nparray,axis=None)
最大值:nparray.max(axis=None)
最小值:nparray.min(axis=None)
極值:np.ptp(nparray,axis=None) 即最大值和最小值只差
標准差:nparray.std(axis=None)
 

其他方法

獲取最大值最小值的位置

 
  np.argmax(nparray,axis=0)
 
  np.argmin(nparray,axis=1)
 

創建一個全0的數組: np.zeros((3,3))

[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]

創建一個全1的數組: np.ones((3,3)) 

[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]

創建一個對角線為1的正方形數組(方陣):np.eye(3)

[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
 

 

 

NUMPY中的復制操作

a=b 完全不復制,a和b相互影響
 
a = b[:],視圖的操作,一種切片,會創建新的對象a,但是a的數據完全由b保管,他們兩個的數據變化是一致的,
 
a = b.copy(),復制,a和b互不影響
 
 

等等用法:

numpy.sort()

numpy.amin()  numpy.amax()

numpy.mean()  numpy.average()  

numpy.std()  # sqrt(mean((x - x.mean())**2))

numpy.var()  # mean((x - x.mean())** 2) 

numpy.sin() cos() tan() pi arcsin(), arccos() arctan() degrees()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM