學員筆記|Python數據分析之numpy入門(四)

視頻來源:

julyedu.com/video/play/

變形ndarray對象

reshape可以輕鬆將數組轉換為二維,三維,甚至更高維度的數組

如果在某個維度指定-1,則numpy會自動推導出正確的形狀

import numpy as np

a1=np.arange(16)#含有16個元素的一維數組

np.reshape(a1,(4,4))#把一維數組reshape為一個矩陣,shape為(4,4)

np.reshape(a1,(2,-1))#把一個矩陣reshape為另一個矩陣,0維度為2,1維度為-1(numpy會自動推導出為8)

拉平ndarray對象

使用ravel()或flatten()函數都可以把高維的ndarray對象拉平為一維。

拼接ndarray對象

先建立兩個矩陣

arr1=np.array([[1,2,3],[4,5,6]])

arr2=np.array([[7,8,9],[10,11,12]])

左右拼(橫向拼接)

使用np.hstack()函數,傳入arr1,arr2這兩個矩陣卻可。

np.hstack([arr1,arr2])

圖示中的紅框為arr1,黑框為arr2,被左右拼接為一個新的矩陣,新矩陣的shape為(2,6)

stack是堆疊的意思,h是水平horizon的縮寫。

使用np.c_[]也可以實現。這裡的c,指column列。

np.c_[]還有生成矩陣的用法

褚老師說concatenate這個方法也可以,但我覺得hstack或np.c_[]更直觀,還要指定AXIS,還是懶點好.

垂直拼(縱向拼接)

使用np.vstack()函數,傳入arr1,arr2這兩個矩陣卻可。

np.vstack([arr1,arr2])

#參考hstack就很容易理解。

使用np.r_[]也可以實現,這裡的r,指row行。

r_用於按行堆疊,c_用於案列堆疊。

np.c_[arr1,arr2]

拆分ndarray對象

水平分割

a,b,c=np.hsplit(arr1,3)

print(a,nn,b,nn,c)

#這裡將arr1切為了3個ndarray對象,並賦值給了a,b,c三個變數。可以看到,這把刀是豎著切的。

垂直分割

np.vsplit(arr1,2)

#這裡將原來shape為(2,3)的矩陣分割為2個shape為(1,3)的一維數組。可以看到,這把刀是橫著切的。

重複ndarray對象

按元素重複

每個元素統一重複3次

與指定每個元素,重複的次數[2,3,4]次

按軸(維度)進行重複

按ndarray對象重複

可以理解為以傳入的ndarray對象為模板,生產出一塊瓷磚,就可以像貼瓷磚一樣,橫向,縱向進行複製。

ndarray對象的輸入與輸出

保存

a1=np.arange(50).reshape(2,5,5)

np.save(d:/a1,a1)

保存好的數組,默認後綴為npy

保存好的數組,默認後綴為npy

讀取

load方法載入numpy格式的數據

np.load(d:/a1.npy)

loadtxt方法載入文本格式的數據

隨堂測試:使用numpy實現softmax的計算

褚老師說這個隨堂小項目是綜合了本節課的大部分,熟練的運用才能把學到的東西變成自己的過程。

關於softmax是什麼,同學們自己百度。

思路:

計算exp:

首先使用隨機數生成shape為(10,3)的矩陣。然後計算exp

m=np.random.rand(10,3)*10+1000

np.exp(m)

因為數字太大,導致計算exp時爆炸了

解決辦法:

每行中的每個元素,都減去該行中最大的元素後,再計算exp

m_max=np.max(m,axis=1)

m_result=np.exp(m-m_max.reshape(10,1))

按行求和

m_sum=np.sum(m_result,axis=1).reshape(10,1)

每一行再除以求出的和

m_softmax=m_result/m_sum

驗證:

softmax後每一行的概率和一定為1,可以這樣去驗證。

寫在最後:七月在線numpy課程的筆記就到此就結束了,後續還有python,pandas,機器學習,可視化等方面的筆記陸續上線,小夥伴們可以快速把學到的東西,通過筆記加深印象。一起加油。


推薦閱讀:

python numpy的樣本標準差怎麼寫?
利用數組進行數據進行處理
ImagePy教程 —— 直方圖調整
數組數據類型轉換及算術運算

TAG:numpy | Python教程 |