Python數據分析-Numpy數值計算


Numpy介紹:

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

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

pyhton里面安裝、引入方式:
  安裝方法:pip install numpy
  引用方式:import numpy as np

 

 創建數組:

a=[1,2,3,4]
b=np.array(a)

print(b,type(b))  #[1 2 3 4] <class 'numpy.ndarray'>

 

數組屬性:

#數組個數
print(b.size)       #4
#數組形狀
print(b.shape)      #(4,)
#每個元素占用你的字節數
print(b.itemsize)   #4
#維數
print(b.ndim)       #1

 

arange定義一個數組,限定步長:

np.arange() 參數為初始值、結束值(不包含、步長
array_arange=np.arange(10,30,5)
print(array_arange)  #[10 15 20 25]

 

linspace定義一個數組,限定數組元素的個數:

np.linspace() 數為初始值、結束值(包含、元素的個數,
array_linspace=np.linspace(0,2,9)    #結果第一位是0   中間數值平均分配  結束為2
print(array_linspace)  #[0.   0.25 0.5  0.75 1.   1.25 1.5  1.75 2.  ]

 

快速創建N維數組:

ones,創建10行10列的數值為浮點1的矩陣

array_one=np.ones((5,5),dtype=int)  #dtype=int 可以設置類型
print(array_one)

zeros,創建10行10列的數值為浮點0的矩陣

array_zero=np.zeros((2,5,5))        #array_zero=np.zeros((2,5,5)) 2:表示創建2個5行5列的數組
print(array_zero)

 

創建自定義數值的數組:

full,創建3*3 數值為5的數組

full_array=np.full((3,3),5)
print(full_array)

eye,用來構造單位矩陣(默認情況下輸出的是對角線全“1”,其余全“0”的方陣

eye_array=np.eye(3)
print(eye_array)

'''結果
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

'''

empty,生成未初始化的隨機值

empty_array=np.empty((2,4))
print(empty_array)

'''結果為
[[6.23042183e-307 1.42417221e-306 1.37961641e-306 6.23039015e-307]
 [6.23053954e-307 1.78020169e-306 1.78021527e-306 3.91786943e-317]]

''' 

 

random生成隨機數組\數值

random.rand(),2*2 (范圍是0-1)

array_random=np.random.rand(2,2)
print(array_random)

random.uniform(),隨機生成指定范圍內的一個數(小數)

array_uniform=np.random.uniform(0,5)
print(array_uniform)  #0.6259318369377503

 random.randint(),隨機生成指定范圍內的一個數(整數不包含2)

array_randint=np.random.randint(0,2)
print(array_randint) #1

 

正太分布
給定均值/標准差/維度的正態分布np.random.normal(1.75, 0.1, (2, 3))

#正態生成4行5列的二維數組
arr=np.random.normal(1.75,0.1,(4,5))
print(arr)

#截取第1至2行的第2至3列(從第0行算起)
after_arr=arr[1:3,2:4]   #【參數1,參數2】 參數1取的行   參數2取的是范圍
print(after_arr)  #

'''結果
[[1.7121083  1.79442264 1.88480996 1.74680449 1.94296451]
 [1.75145398 1.84717094 1.61700579 1.79300659 1.65306822]
 [1.84915626 1.82844994 1.42992838 1.74578747 1.81638628]
 [1.78611223 1.79935389 1.71098421 1.7065452  1.93011894]]
 
[[1.61700579 1.79300659]
 [1.42992838 1.74578747]]
'''

 

reshape,改變數組形狀(注意:要求前后元素個數匹配)

one_20 = np.ones([20])
print("-->1行20列<--")
print(one_20)

#將上面的一維數組變為下面的二維

one_4_5 = one_20.reshape([4,5])
print("將形狀分為-->4行5列<--")
print(one_4_5)

 

where,條件運算

stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
print(stus_score)
#比較並替換運算
res=np.where(stus_score<80,0,90)  #(如果數值小於80,替換為0,如果大於80,替換為90)
print(res)

 

統計運算

指定軸最大值amax(求每一行和列的最大值)

# 指定軸最大值amax(求每一行和列的最大值)
stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
print(stus_score)

result_amax=np.amax(stus_score,axis=0)  #axis=0/1; 0表示列 1表示行
print('每一列的最大值:',result_amax)  #[86 88]

result_amax2=np.amax(stus_score,axis=1)
print('每一行的最大值:',result_amax2)   #[88 82 84 86 81]

指定軸最小值amin(求每一行和列的最小值)

#指定軸最小值amin(求每一行和列的最小值)
stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
print(stus_score)
result_amin=np.amin(stus_score,axis=0)
print('每一列的最小值:',result_amin)

result_amin2=np.amin(stus_score,axis=1)   #[75 75]
print('每一列的最小值:',result_amin2)   #[80 81 75 83 75]

 

mean,求平均值

stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])

# 求每一行的平均值(0表示列)
print("每一列的平均值:")
result = np.mean(stus_score, axis=0)
print(result)  #[81.4 81.6]

# 求每一行的平均值(1表示行)
print("每一行的平均值:")
result = np.mean(stus_score, axis=1)
print(result)  #[84.  81.5 79.5 84.5 78. ]

 

std,求方差

stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])

# 求每一行的方差(0表示列)
print("每一列的方差:")
result = np.std(stus_score, axis=0)
print(result)

# 求每一行的方差(1表示行)
print("每一行的方差:")
result = np.std(stus_score, axis=1)
print(result)

 

數組運算

數組與數的運算

加法運算

#數組與數的運算(加法)
stus_score=np.array(([80, 88], [82, 81], [84, 75], [86, 83], [75, 81]))
print(stus_score)
print(stus_score[:,0])  #[80 82 84 86 75] 打印第一列的值
#實現行和列的值都加5
stus_score[:,0] = stus_score[:,0]+5 #每一列值加5
stus_score[:,1] = stus_score[:,1]+5 #每一行值加5
print(stus_score)

乘法運算

#數組與數的運算(乘法)
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
print("減半前:")
print(stus_score)
#實現行和列的值都減一半
stus_score[:, 0] = stus_score[:, 0]*0.5 #每一列乘0.5
stus_score[:, 0] = stus_score[:, 1]*0.5 #每一行乘0.5
print("減半后:")
print(stus_score)

數組與數組之間運算加減乘除運算(基本用的不多)

a=np.array([1,2,3])
b=np.array([10,20,30])

c=a+b
d=a-b
e=a*b
f=a/b
print(c)   #[11 22 33]
print(d)    #[ -9 -18 -27]
print(e)    #[10 40 90]
print(f)    #[0.1 0.1 0.1]

 

矩陣運算

場景:假設下面每個列表代表每個學生成績,例如,張三 平時成績80、期末成績88,計算每個人總成績是多少?
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])

#根據,平時成績占40% 期末成績占60%, 計算結果
q=np.array([[0.4],[0.6]])
result=np.dot(stus_score,q)
print(result)

'''結果
E:\python36\python3.exe C:/Python數據分析/numpy模塊.py
[[84.8]
 [81.4]
 [78.6]
 [84.2]
 [78.6]]
'''

vstack矩陣垂直拼接

#vstack矩陣垂直拼接
v1=[[0,1,2,3,4,5,],
    [6,7,8,9,10,11]]

v2=[[12, 13, 14, 15, 16, 17],
    [18, 19, 20, 21, 22, 23]]

result=np.vstack((v1,v2))
print('v1與v2垂直拼接結果為:',result)
'''結果
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

'''

hstack矩陣水平拼接

#hstack矩陣水平拼接
v1=[[0,1,2,3,4,5,],
    [6,7,8,9,10,11]]

v2=[[12, 13, 14, 15, 16, 17],
    [18, 19, 20, 21, 22, 23]]
result=np.hstack((v1,v2))
print('v1與v2水平拼接結果為:',result)
'''結果
[[ 0  1  2  3  4  5 12 13 14 15 16 17]
 [ 6  7  8  9 10 11 18 19 20 21 22 23]]

 

練習題目:

題目1:對一個二維數組,選出其第一列和第二列,組成新的二維數組。

res=np.array(([1,2,3],[4,5,6],[7,8,9]))
print(res)
print(res[:,[1,2]])  #思路第一個參數時表示去所有行,近一步然后取第1,2列
'''結果為
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[2 3]
 [5 6]
 [8 9]]

'''

題目2:對於一個數組,選出其第1,3,4,6,7個元素,組成新的二維數組。

res=np.array([1,2,3,4,5,6,7,8,9])
print(res[[1,3,4,6,7]])


免責聲明!

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



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