機器學習入門筆記一 numpy入門之常用基礎方法

上一篇主要介紹了numpy的索引方法,這一篇介紹一些常用的方法。、

常見計算方法

import numpy as np
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])

#一些常見的計算方法:sum(),min(),max(),mean(),std(),sqrt(),exp()
#使用時直接調用就行了,注意axis這個參數,axis = 1表示對行計算,axis = 0對列計算
print("#求和")
print("按行",matrix.sum(axis = 1))
print("按列",matrix.sum(axis = 0))
print('-----------------')
print("#求均值和方差")
print(matrix.mean(axis = 1))
print(matrix.std(axis = 1))
print('-----------------')
print("#求最大最小值")
print(matrix.max(axis = 1))
print(matrix.min(axis = 1))
#求和
按行 [ 30  75 120]
按列 [60 75 90]
-----------------
#求均值和方差
[10. 25. 40.]
[4.0824829 4.0824829 4.0824829]
-----------------
#求最大最小值
[15 30 45]
[ 5 20 35]

指定維度

np.arange(n,m,i)函數生成一個以n開始,m結束,步長為i的array

#指定維度,np.reshape()
array = np.arange(8)      #np.arange(n,m,i)函數生成一個以n開始,m結束,步長為i的array
print(array)

print(array.reshape(2,4))  #變為2*4的矩陣了


[0 1 2 3 4 5 6 7]
[[0 1 2 3]
 [4 5 6 7]]

指定均分成幾塊

np.linspace(n,m,i),這個函數生成一個以n開始,m結束,均分為i份的array

# np.linspace(n,m,i),這個函數生成一個以n開始,m結束,均分為i份的array
print(np.linspace(0,9,10))
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

求對數和開方

np.exp() 返回自然對數以常數e為底數的對數
np.sqrt() 就是對數進行開方

# 求對數和開方
print("原數",matrix[:,0])
print("對數",np.exp(matrix[:,0]))    #自然對數以常數e為底數的對數
print("開方",np.sqrt(matrix[:,0]))
原數 [ 5 20 35]
對數 [1.48413159e+02 4.85165195e+08 1.58601345e+15]
開方 [2.23606798 4.47213595 5.91607978]

取整方法

np.floor() 向下取整;
np.ceil() 向上取整;
np.trunc() 取整數部分;
np.rint() 四舍五入取整。

# 取整方法: np.floor()向下取整; np.ceil() 向上取整; np.trunc() 取整數部分;   np.rint()  四舍五入取整。
array = np.random.normal(5,5,5)   
#這個方法從正態分布中抽取隨機數,第一個參數是分布的平均值,第二個是標準偏差,第三個是樣本大小
print(array)
print("向下取整",np.floor(array))
print("向上取整",np.ceil(array))
print("取整數部分",np.trunc(array))
print("四舍五入取整",np.rint(array))
[ 9.95119225 -2.00380924  5.05684191  2.26461747 -4.45758977]
向下取整 [ 9. -3.  5.  2. -5.]
向上取整 [10. -2.  6.  3. -4.]
取整數部分 [ 9. -2.  5.  2. -4.]
四舍五入取整 [10. -2.  5.  2. -4.]

將矩陣拉平

np.ravel() 其實就是將矩陣按順序變為一個一維矩陣

#ravel() 方法可以將矩陣拉平
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])
print(matrix.ravel())
[ 5 10 15 20 25 30 35 40 45]

矩陣拼接

np.hstack() 橫向拼接
np.vstack() 縱向拼接
np.stack() 需要指定axis,而且會增加一個維度

#矩陣拼接
mat1 =  np.array([
                    [5, 10], 
                    [15, 20],
                 ])
mat2 =  np.array([
                    [50, 100], 
                    [150, 200],
                 ])

new_mat1 = np.hstack((mat1,mat2))   #橫向拼接
new_mat2 = np.vstack((mat1,mat2))   #縱向拼接
print(new_mat1)
print('---------------')
print(new_mat2)

#np.stack()方法也可拼接矩陣,但是會增加一個維度,同時需要指定axis
new_mat3 = np.stack((mat1,mat2),axis = 1)   

print('---------------')
print(new_mat3)
 [ 15  20 150 200]]
---------------
[[  5  10]
 [ 15  20]
 [ 50 100]
 [150 200]]
---------------
[[[  5  10]
  [ 50 100]]

 [[ 15  20]
  [150 200]]]

矩陣分割

np.hsplit() 橫向拼接
np.vsplit() 縱向拼接
np.split() 需要指定axis,默認是0

#切分矩陣
matrix = np.array([
                    [5, 10, 15], 
                    [20, 25, 30],
                    [35, 40, 45]
                 ])

print(np.hsplit(matrix,3))  #縱向切分    要注意維度要和你的矩陣一致,不然會報錯
print('----------------------------------------------')
print(np.vsplit(matrix,3))  #橫向切分

print(np.split(matrix,3,axis = 1))   #也可直接split(),但要指定axis,默認是0
[array([[ 5],
       [20],
       [35]]), array([[10],
       [25],
       [40]]), array([[15],
       [30],
       [45]])]
----------------------------------------------
[array([[ 5, 10, 15]]), array([[20, 25, 30]]), array([[35, 40, 45]])]
Out[75]:
[array([[ 5],
        [20],
        [35]]), array([[10],
        [25],
        [40]]), array([[15],
        [30],
        [45]])]

返回最大最小值索引

np.argmax() 不指定axis時會默認算整個矩陣的最大值索引(不過這個索引是拉平后的,需要是可以先ravel一下),指定后按行或按列求,對于argmin()也一樣。
np.argmin()

# 返回最大最小值索引
matrix = np.array([
                    [15, 50, 10], 
                    [20, 40, 30],
                    [35, 5, 45]
                 ])
MAX_index = np.argmax(matrix) 
max_index = np.argmax(matrix,axis = 0)    
#不指定axis時會默認算整個矩陣的最大值索引(不過這個索引是拉平后的,需要是可以先ravel一下),指定后按行或按列求。
min_index = np.argmin(matrix,axis = 0) 
print(MAX_index)
print(max_index)
print(min_index)
1
[2 0 2]
[0 2 0]

排序

np.sort() 可指定按行或按列排序。
np.argsort() 可得到排序索引。

# 排序
matrix = np.array([
                    [15, 50, 10], 
                    [20, 40, 30],
                    [35, 5, 45]
                 ])
sorted_matrix = np.sort(matrix,axis = 1)  #可指定按行或按列排序
print(sorted_matrix)

print(np.argsort(matrix))    #可得到排序索引
[[10 15 50]
 [20 30 40]
 [ 5 35 45]]
[[2 0 1]
 [0 2 1]
 [1 0 2]]

擴展矩陣

np.tile(matrix,(n,m)) 將matrix復制n*m倍

#復制擴展矩陣
mat =  np.array([
                    [5, 10], 
                    [15, 20],
                 ])
np.tile(mat,(2,2))  #擴展為原數2*2的矩陣
array([[ 5, 10,  5, 10],
       [15, 20, 15, 20],
       [ 5, 10,  5, 10],
       [15, 20, 15, 20]])

矩陣乘法

A * B 如果是array結構,就是各自對應相乘,如果是矩陣結構,就是矩陣乘法。
A.multiply(A,B) 對應各自相乘。
A.dot(B) = np.dot(A,B) 矩陣乘法。

#矩陣乘法
A = np.array( [[1,0],
               [0,1]] )
B = np.array( [[3,3],
               [3,3]] )

print("------------------當A,B為array時---------------------")
#當A,B為array時
print("*乘\n",A*B)     # 此處對應相乘
print("np.multiply\n",np.multiply(A,B)) #對應相乘
# 以下兩個方法都是矩陣乘法 
print("np.dot\n",A.dot(B))  
print(np.dot(A, B))
print("------------------當A,B為matrix時---------------------")
#當A,B為matrix時,以下所有乘法都是矩陣乘法
A = np.mat(A)
B = np.mat(B)
print("*乘\n",A*B)       #此處矩陣乘法
print("np.multipl\n",np.multiply(A,B))  #對應相乘
print("np.dot\n",A.dot(B))  
print(np.dot(A, B))
------------------當A,B為array時---------------------
*乘
 [[3 0]
 [0 3]]
np.multiply
 [[3 0]
 [0 3]]
np.dot
 [[3 3]
 [3 3]]
[[3 3]
 [3 3]]
------------------當A,B為matrix時---------------------
*乘
 [[3 3]
 [3 3]]
np.multipl
 [[3 0]
 [0 3]]
np.dot
 [[3 3]
 [3 3]]
[[3 3]
 [3 3]]

至此,numpy的學習暫時告一段落,因為我覺得目前實用的一些基本方法都在這里了,以后遇到一些新方法也會加入進來的。這些方法也不用死記硬背,真正需要用到時可以查文檔的。
下一篇開始學習pandas了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • import numpy as np 創建ndarray data1 = [6,7.5, 8, 0, 1]arr1...
    陸文斌閱讀 668評論 0 1
  • Numpy是Python的第第三方模塊,用于科學計算。 1.屬性 列表轉化為數組: 2. array的創建 指定數...
    井底蛙蛙呱呱呱閱讀 3,388評論 0 10
  • 前言 numpy是支持 Python語言的數值計算擴充庫,其擁有強大的高維度數組處理與矩陣運算能力。除此之外,nu...
    TensorFlow開發者閱讀 3,245評論 0 35
  • 基礎篇NumPy的主要對象是同種元素的多維數組。這是一個所有的元素都是一種類型、通過一個正整數元組索引的元素表格(...
    oyan99閱讀 5,148評論 0 18
  • ListView組件用于顯示一個列表,在基于Flutter的開源中國客戶端App中,新聞列表、動彈列表等都需要用到...
    彡廿閱讀 792評論 0 1