# 導入 NumPy, 開始學習
import numpy as np
不用 Python 非好漢,不曉 NumPy 真遺憾
本專欄 將使用 圖解 以及 腦圖 的方法來記錄我的《圖解 NumPy 學習筆記》。
NumPy 是 Numerical Python 的簡稱,它是目前 Python 數值計算 中最爲重要的基礎包。
——《利用 Python 進行數據分析》
0 NDArray —— 多維數組對象
NDArray( N-dimensional array )是學習 NumPy 的基礎:
-
快速 而 靈活 的 大數據集容器
-
存儲 和 變化 數據 的 主要工具
它有多快,它有多靈活?
且聽我慢慢道來。
1 生成 NDArray
首先,我們可以使用 np.array() 直接創建數組:
也可使用以下的方法,我們只需將生成元素的數量傳給它們:
你看這個數組,它又方又正,
我們需要一些屬性去描述它。
這裏有三個屬性 np.ndim 、np.shape 和 np.dtype :
-
np.ndim :描述數組的 維度,dimension 維度
-
np.shape :表徵數組每一維度的 數量
-
np.dtype :描述數組的 數據類型
我們以 np.zeros() 爲例:
-
shape : 整數 或 整數元組 ,例如 3 或 (2,3)
-
dtype : 默認爲 np.float64
-
order : 默認 'C' ,行優先
向 np.shape 傳遞參數,我們就能創建 多維數組 :
這裏補充一下, np.reshape() 的用法:
下面是常用的 數組生成函數 :
創建數組後,就可以開始以有趣的方式操作它們了。
1.2 NDArray 的數據類型
等等剎個車,
某些應用場景下,我們還需要考慮數組的 數據類型 :
-
np.dtype :查看 數組 數據類型
-
np.astype() : 修改 數組 數據類型
下面是 常用 的 NumPy 數據類型 :
我們還可以將 數字字符串 轉換爲 數字:
好了,終於可以開始有趣的操作數組了。
1.3 NumPy 數組運算
講重點了,
數組之所以 重要 是因爲它允許你進行 批量操作 而無須任何 for 循環。
這種特性被稱爲 向量化 :
-
任何在 兩個等尺寸數組 之間的算術操作都應用了 逐元素操作 的方式
讓我們創建兩個 NumPy 數組來展示它們的用途:
向量化 加減乘除 :
當然也可以進行 標量 計算:
Python 的 for 循環 慢的可怕,用 向量化 計算可以快百倍。
1.4 基礎索引與切片
值得強調的是 切片 是 左閉右開,這是個坑,
裏面躺在很多人,包括我。
這裏有兩個概念需要說明:
-
副本:拷貝,物理內存不在同一位置
-
視圖:引用,物理內存在同一位置
顯然 視圖 更節約內存空間,
那什麼時候是“副本”,什麼時候是“視圖”呢?
答:
Python 序列 的 切片 屬於 副本;
Numpy np.array 的 切片 屬於 視圖。
如果想要一份 數組切片的拷貝 而不是視圖的話,就必須 顯式地複製 這個數組,例如 data[1:3].copy()。
1.5 布爾索引
數組比較操作(比如 ==)也是可以 向量化 的,
我們先創建兩個數組,
一個代表姓名(name),
一個代表對應的成績(score):
進行 布爾索引:
查看 Yellow 的成績:
看看誰沒有及格:
這裏需要強調的是 布爾索引 總是生成數據的 拷貝。
1.6 神奇索引
神奇索引,一個 magical 的名字,
它是 Numpy 中的術語,用於描述使用 整數數組 進行數據索引。
神奇索引的結果總是 一維 的。
神奇索引在賦值時,有妙用。
這裏需要強調的是 神奇索引 也總是生成數據的 拷貝。
1.7 數組轉置和換軸
轉置 np.T :
換軸 np.transpose() :
-
接受 包含軸編號 的 元組,用於 置換軸
二維數組 置換軸:
二維數組置換軸
看到這裏,會想這個有什麼用呢,不是 轉置 嗎?
如果有這個疑問,可以看看下面三維的使用。
三維數組 置換軸:
可以看我下面這個回答,就對 三維數組 巧妙地使用了 np.transpose(),實現了 圖像信號信道分離 、 信道重組 :
一副圖像,是(3,566,800)這種形式,如何變成(566,800,3)這樣形式?
人生苦短,我用 Python ;
人生苦短,我用 NumPy。
下一期,我們將繼續圖解 NumPy 的 通用函數 。
以上就是 NumPy 多維數組 的基本操作了,其他內容會在後續的文章中繼續講解。
我也會在知乎上尋找問題,使用 NumPy 進行回答,以補充我的專欄文章。
謝謝您的觀看,感謝您的收藏點贊,期待您的評論交流。
The End
Last updated: 2019/9/26
本文參考:
名稱:A Visual Intro to NumPy and Data Representation 作者:Jay Alammar
名稱:Python for Data Analysis 作者:Wes McKinney