學員筆記|Python數據分析之numpy入門(四)
視頻來源:
http://www.julyedu.com/video/play/65/599
變形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教程 —— 直方圖調整
※數組數據類型轉換及算術運算