Python 數據分析之 Numpy(一)

作者:小蝸牛愛學習
來源:https://blog.csdn.net/qq_42755939/article/details/106953651?utm_source=app

一、什麼是 Numpy?

NumPy(Numerical Python)是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix)),支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫 [1] 。

二、創建數組

瞭解了numpy的概念我們就來感受一下一下它的強大吧!

Numpy三種創建數組的方法

1、調用numpy的array()方法將列表轉化爲數組

arr01 = np.array([1,2,3])
print("array01的類型:",type(arr01)) #array01的類型: <class 'numpy.ndarray'> 
print(arr01)#[1 2 3]

2、調用numpy的array()方法將range對象轉化爲數組

arr02 =np.array(range(6))print("array02的類型:",type(arr02),arr02)#array02的類型: <class 'numpy.ndarray'> [0 1 2 3 4 5]

3、調用用numpy的arange()方法生成數組

arr03 = np.arange(10)print("array03的類型:",type(arr03),arr03)#array03的類型: <class 'numpy.ndarray'> [0 1 2]

三、數組的數據類型

1、Numpy支持多種數據類型

numpy數組支持多種數據類型:

1、整型

類型 代碼
int8 i1
int16 i2
int32 i4
int64 i8

2、浮點型

float16 f2
float32 f4
float64 f8

3、複數:complex_ complex64 complex128

4、bool類型:true false

#01、int32
arr04 = np.arange(3)
print(arr04,arr04.dtype) #[0 1 2] int32

#02、float64
data = [random.random() for i in range(10)]
print(data) #[0.4495169679906501, 0.37812776730917963, 0.27453827162750943]

arr05 = np.array(data)
print(arr05,arr05.dtype) #float64

2、Numpy的round()方法

保留幾位小數,但是數據類型不變

arr05 = np.round(arr05,3)
print(arr05,arr05.dtype) #[0.44951697 0.37812777 0.27453827] float64

3、指定創建的數組的數據類型

#int8
arr06 = np.arange(10,dtype="i8")
print(arr06,"數據類型:",arr06.dtype) #[0 1 2 3 4 5 6 7 8 9] 數據類型: int64

#float64
arr07 = np.array(range(10),dtype="float64")
print(arr07,arr07.dtype) #[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64

arr08 = np.array([1,1,0,0,1,0,1,1],dtype="bool")
print(arr08,arr08.dtype)  #[ True  True False False  True False  True  True] bool

4、修改數組的數據類型

使用astype()方法修改數組的數據類型

arr09 = np.array([2.1,1.6,10.3],dtype="float")
arr09 = arr09.astype("i1")
print(arr09,arr09.dtype) #[ 2  1 10] int8

arr10 = np.array([1,1,0,1,0,0,1])
print(arr10.dtype) #int32
print(arr10.astype("bool")) #[True True False  True False False  True]

四、數組的形狀/維度

1、Numpy的shape屬性

#1、使用numpy的shape屬性可以返回數組的維度
arr11 = np.array(range(10))print(arr11,arr11.shape)#這是個一維數組,返回的是(10,)表示他是一維數組,有10個元素
arr12 = np.array([[1,2,3],[4,5,6]])print(arr12,arr12.shape)  #這是個二維三列數組(2, 3)

arr13 = np.array([[1,2,3],[4,5,6],[7,8,9]])print(arr13,arr13.shape)  #這也是個二維數組(3, 3)

arr14 = np.array([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[7,8]],[[9,10],[11,12],[13,14]],[[15,16],[17,18],[19,20]]])
print(arr14,arr14.shape) #這是個三維數組(4, 3, 2),4表示有4塊數據,3表示每塊有三行,2表示每行有2列數據

2、轉化數組維度

reshape()方法

這個方法返回的是一個新的數組,原來的數組不變

arr15 = np.array([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[7,8]],[[9,10],[11,12],[13,14]],[[15,16],[17,18],[19,20]]])
arr16 = arr15.reshape((3,8))#將arr15轉化爲二維數組
print(arr16,arr16.shape) #(3, 8)

arr17 = arr15.reshape((24,))
print(arr17)

#當不知道一個數組的形狀時,轉化爲一維數組的方法一:
t1 = arr15.shape[0]
t2 = arr15.shape[1]
t3 = arr15.shape[2]
arr18 = arr15.reshape(t1*t2*t3,)
print(arr18)

flatten()方法

直接將多維數組轉化爲一維數組,他是展開,扁平化的意思

#當不知道一個數組的形狀時,轉化爲一維數組的方法:使用方法flatten()方法
arr19 = arr15.flatten()
print(arr19)

五、數組的計算

1、廣播原則

規則1:如果兩個數組的維度不相同,那麼小維度數組的形狀將會在最左邊補1.

規則2:如果兩個數組的形狀在任何一個維度上不匹配,那麼數組的形狀會沿着維度爲1擴展以匹配另外一個數組的形狀。

規則3:如果兩個數組的形狀在任何一個維度上都不匹配並且沒有任何一個維度爲1,那麼會引起異常。

2、數組的計算

數組與數的計算

import numpy as np


#創建一個二維三列數組
arr01 = np.array([[1,2,3],[4,5,6],[7,8,9]])
#1、加
n = 5
arr02 = arr01 + n
print(arr02) #[[ 6  7  8] [ 9 10 11] [12 13 14]]

#2、減
arr03 = arr01 - n
print(arr03)#[[-4 -3 -2] [-1  0  1] [ 2  3  4]]

#3、乘
arr04 = arr01 * n
print(arr04)#[[ 5 10 15] [20 25 30] [35 40 45]]

#4、除
arr05 = arr01 / n
print(arr05)#[[0.2 0.4 0.6] [0.8 1.  1.2] [1.4 1.6 1.8]]

數組與數組的計算

1、數組與數組之間可以進行加、減、乘、除、指數、求倒數、求相反數、位運算等

2、數組與數組計算分兩類:

①:相同形狀的數組 對應相互加減等

②:不同形狀的數組 遵循廣播原則

① 相同形狀的數組
#1、形狀相同的數組之間的運算
t1 = np.array(range(2,8)).reshape(2,3)
t2 = np.arange(4,10).reshape(2,3)
t01 = t1 - t2
t02 = t1 + t2
t03 = t1 * t2
t04 = t1 / t2
t05 = t1**2
print("t1:",t1)     #t1: [[2 3 4] [5 6 7]]
print("t2:",t2)     #t2: [[4 5 6] [7 8 9]]
print("t01:",t01)   #t01: [[-2 -2 -2]
 [-2 -2 -2]]
print("t02:",t02)#t02: [[ 6  8 10] [12 14 16]]
print("t03:",t03)#t03: [[ 8 15 24] [35 48 63]]
print("t04:",t04.round(2))#t04: [[0.5  0.6  0.67] [0.71 0.75 0.78]]
print("t05:",t05)#t05: [[ 4  9 1
6] [25 36 49]]
② 不同形狀的數組
#2、形狀不同的數組之間的運算,遵循廣播法則

#eg1:
a1 = np.arange(2,8).reshape(2,3)
a2 = np.arange(3)
print("a1:",a1) #a1: [[2 3 4] [5 6 7]]
print("a2:",a2) #a2: [0 1 2]
print("a1+a2:",a1 + a2) #a1+a2: [[2 4 6] [5 7 9]]

#eg2:
b1 = np.arange(1,4).reshape(3,1)
b2 = np.arange(3,6)
print("b1:", b1) #b1: [[1] [2] [3]]
print("b2:", b2) #b2: [3 4 5]
print("b1+b2:",b1 + b2)#b1+b2: [[4 5 6] [5 6 7] [6 7 8]]

#eg3:
c1 = np.array([[1,2,8],[2,3,5],[6,7,10]])
c2 = np.array([1,2,3])
print("c1+c2:",c1 + c2) #c1+c2: [[ 2  4 11] [ 3  5  8] [ 7  9 13]]

eg1結果分析:

1、 a1 = [[2 3 4] [5 6 7]] a2 = [0,1,2] 兩個數組的形狀爲 a1.shape=(2,3),a2.shape=(3,)

2、 根據規則1: 數組a2的維度更小,所以在其左邊補1,變爲a2.shape -> (1,3),此時a1.shape=(2,3),a2.shape=(1,3),即a1 = [[2 3 4] [5 6 7]] a2 = [[0 1 2]]

3、 根據規則2: a1,a2的形狀還是不匹配,所以a2會沿着維度爲1的方向擴展,變成a2.shape=(2,3),

即a1 = [[2 3 4] [5 6 7]],a2 = [[0 1 2] [0 1 2]],現在兩個數組的形狀匹配了,可以看到它們的最終形狀都爲(2,3)

eg2結果分析:

1、 b1 = [[1] [2] [3]] b2 = [3,4,5]兩個數組的形狀爲 b1.shape=(3,1),b2.shape=(3,)

2、 根據規則1:數組b2的維度更小,所以在其左邊補1,變爲b2.shape -> (1,3),此時b1.shape=(3,1),b2.shape=(1,3),即b1 = [[1] [2] [3] b2 = [[3 4 5]]

3、 根據規則2:b1,b2的形狀還是不匹配,所以b1,b2會沿着維度爲1的方向擴展,

變成b1.shape=(3,3),b2.shape=(3,3),即b1 = [[1 1 1] [2 2 2] [3 3 3]],b2 = [[3 4 5] [3 4 5] [3 4 5]]

現在兩個數組的形狀匹配了,可以看到它們的最終形狀都爲(3,3)

推薦閱讀:


關注微信公衆號『傑哥的IT之旅』,後臺回覆“1024”查看更多內容,回覆“微信”添加我微信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章