有人把NumPy畫成了畫,生動又形象
- 2019 年 10 月 11 日
- 筆記
原文鏈接:
http://jalammar.github.io/visual-numpy/
創建數組
我們可以創建一個NumPy數組(也就是強大的ndarray),方法是傳遞一個python列表並使用' np.array() '。在本例中,python創建了我們可以在這裡看到的數組:
通常情況下,我們希望NumPy為我們初始化數組的值。NumPy為這些情況提供了像ones()、zeros()和random.random()這樣的方法。我們只是把我們想要生成的元素的數量傳遞給他們:
一旦我們創建了數組,我們就可以開始以有趣的方式操作它們。
數組運算
讓我們創建兩個NumPy數組來展示它們的用處。我們稱它們為data和ones:
將它們按位置相加(即添加每一行的值)就像輸入data + ones一樣簡單:
當我開始學習這些工具時,我發現這樣的抽象使我不必在循環中編寫這樣的計算程式,這讓我耳目一新。這是一個很好的抽象概念,可以讓你在更高的層次上思考問題。
我們還可以這樣做:
通常情況下,我們希望在數組和單個數字之間執行操作(我們也可以將此稱為向量和標量之間的操作)。例如,我們的數組以英里為單位表示距離,我們想把它轉換成千米。我們簡單地說data* 1.6:
看到NumPy是如何理解這個操作的了嗎?這個概念叫做廣播,它非常有用。
索引
我們可以索引和切片NumPy數組的所有方法,我們可以切片python列表:
聚合
NumPy給我們的額外好處是聚合功能:
除了最小值,最大值,和求和,你還可以使用其他的聚合函數,比如mean得到平均值,prod得到所有元素相乘的結果,std得到標準差,還有很多其他的。
更高的維度
我們看過的所有例子都是關於一維向量的。NumPy一個關鍵的部分是它能夠將我們目前看到的所有內容應用到任意數量的維度。
創建矩陣
我們可以傳遞python列表的列表的形狀如下,讓NumPy創建一個矩陣來表示它們:
np.array([[1,2],[3,4]])
我們也可以使用上面提到的方法(ones()、zero()和random.random()),只要我們給它們一個元組來描述我們正在創建的矩陣的維數:
矩陣運算
如果兩個矩陣大小相同,我們可以使用算術運算符(+-*/)對矩陣進行加法和乘法。NumPy將這些操作作為位置操作處理:
只有當不同維數為1時(例如,矩陣只有一列或一行),我們才可以對不同大小的矩陣執行這些算術操作,在這種情況下,NumPy使用它的廣播規則來執行該操作:
點乘
算術的一個關鍵區別是使用點乘和矩陣乘法。NumPy給每個矩陣一個點乘dot()方法,我們可以用它來執行點積操作與其他矩陣:
我在這個圖的底部添加了矩陣維數來強調這兩個矩陣必須有相同的維數在它們彼此面對的一邊。你可以把這個操作想像成這樣:
矩陣聚合
我們可以像聚合向量一樣聚合矩陣:
我們不僅可以在矩陣中聚合所有的值,還可以使用axis參數跨行或跨列聚合:
暫時翻譯到這裡,後面還有更多的內容,需要的同學可以留言,我會翻譯後面的內容。