NumPy 學習筆記(二):NDArray

 

# 導入 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.shape題

這裏補充一下, np.reshape() 的用法:

圖解 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 的成績:

Yellow 不錯呀

 

看看誰沒有及格:

原來是 Wangcai 呀

 

這裏需要強調的是 布爾索引 總是生成數據的 拷貝

 


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章