來源 | 「Practical Python Data Visualization A Fast Track Approach To Learning Data Visualization With Python」
作者 | Ashwin Pajankar
譯者 | Liangchu
校對 | gongyouliu
編輯 | auroral-L
全文共2400字,預計閱讀時間15分鐘。
第四章 科學Python生態和Numpy
科學Python生態系統
Numpy和Ndarrays
不止是一維數據
Ndarrays屬性
Numpy常亮
總結
在第三章中,你學習了如何使用Python 3和數據可視化庫leather創建簡單的可視化。你也知道,使用數據可視化庫leather只能實現初級的可視化。對於更複雜、更精細的可視化,我們需要使用具有高級數據處理和可視化功能的庫。
本章探討科學Python生態系統及其組件,還提供了NumPy庫的概述和一些代碼演示。本章介紹以下內容:
• 科學Python生態系統
• NumPy和ndarrays
• Ndarray屬性
• NumPy常量
在本書的其餘章節中,我們將逐一探討科學Python生態系統的組成部分。在本書中,我們將使用科學Python生態系統中的不同庫。你在本章中所獲得寶貴知識可以作為其餘章節的基礎。由於本章是一個廣泛的生態系統的介紹性章節,所以我會儘量簡短而實用地開展本章節內容。
科學Python生態系統科學Python生態系統(The scientific Python ecosystem,SciPy)是用於數學、科學和工程的Python庫的集合。SciPy具有以下核心組成部分:
Python程式語言:在第一章中,我們探討了Python 3程式語言的安裝步驟和一些基礎知識
Numpy:這是數值Python(Numerical Python)庫,即用Python進行數值計算的基礎包。它定義了一種N維數據類型,可用於多維數據的數值計算。
SciPy庫:這包括許多可用於科學應用的數學和科學計算程序。
Matplotlib:這是一個受MATLAB啟發的Python 3數據可視化庫。
這個生態系統還有幾個重要的成員庫:
Pandas:即Python數據分析(Python data analysis)。它提供多種數據結構,如系列(series)和數據幀(data frame)。
SymPy:即符號Python(symbolic Python),是符號相關的操作庫。它用於符號數學和代數。
scikit-image:這個庫有用於圖像處理的程序
scikit-learn:這個庫有用於機器學習的程序。
通常與SciPy一起使用的交互環境是IPython或Jupyter Notebook。我們在第二章中詳細介紹了Jupyter Notebook,並且在第三章中使用了它。我們將在本書的其餘部分繼續使用它。
下一節將更詳細地介紹NumPy庫。
Numpy和Ndarrays如前所述,NumPy是Python中數值計算的基本包。NumPy庫最有用的特性是稱為ndarray的多維容器數據結構。
ndarray是具有相同數據類型和大小的項的多維數組(也稱為容器)。我們可以在創建ndarray時定義項的大小和數據類型。與列表(list)等其他數據結構一樣,我們可以通過索引訪問數據數組的內容,ndarrays中的索引從0開始(就像C中的數組或Python中的列表一樣)。我們可以用ndarrays進行各種計算。SciPy中所有其他的庫和別的庫也識別並使用NumPy ndarrays和相關程序來表示它們的數據結構以及其上的操作。
下面讓我們從一個實際例子開始。為本章創建一個新的Jupyter筆記本,然後運行以下命令安裝NumPy庫:
!pip3 install numpy
通過運行以下命令將其導入當前筆記本:
import numpy as np
你可以創建一個列表,然後使用它創建一個簡單的數組,如下所示:
l1 = [1, 2, 3]
x = np.array(l1, dtype=np.int16)
這裡我們通過一個列表創建了一個ndarray。成員的數據類型是16位整數。你可以在https://numpy.org/devdocs/user/basics.types.html上找到它所支持數據類型的詳細列表。我們可以通過一行編寫前面的代碼:
x = np.array([1,2,3], dtype=np.int16)
接下來列印ndarray的值及其類型:
print(x)
print(type(x))
輸出如下:
[1 2 3]
<class 'numpy.ndarray'>
從輸出可以看到,它是numpy.ndarray類。如前所述,索引從0開始。我們可以通過如下方式訪問ndarray的成員來演示這一點:
print(x[0]); print(x[1]); print(x[2])
以下是輸出:
1
2
3
我們甚至可以使用負索引:-1返回最後一個元素,-2返回倒數第二個元素,依此類推。舉個例子:
print(x[-1])
如果我們使用了無效的索引值,將拋出異常:
print(x[3])
在這個語句中,我們試圖訪問ndarray中不存在的第四個元素。因此,它返回以下錯誤:
IndexError Traceback (most recent call last)
<ipython-input-4-d3c02b9c2b5d> in <module>
----> 1 print(x[3])
IndexError: index 3 is out of bounds for axis 0 with size 3
不止是一維數據一個數組(array)可以有多個維度,如下所示:
x1 = np.array([[1, 2, 3], [4, 5, 6]], np.int16)
這表示兩行三列的二維矩陣。我們可以訪問如下單個元素:
print(x1[0, 0]); print(x1[0, 1]); print(x1[0, 2]);
我們甚至可以訪問整行:
print(x1[0, :])
print(x1[1, :])
輸出如下所示:
[1 2 3]
[4 5 6]
我們可以使用以下語句訪問整個列:
print(x[:, 0])
輸出如下:
[1 4]
我們甚至可以創建不止二維的數據。以下是創建三維(three-dimensional,3D)數組的語法:
x2 = np.array([[[1, 2, 3], [4, 5, 6]],[[0, -1, -2], [-3, -4, -5]]], np.int16)
科學和商業應用程式通常使用多維數據。Ndarray對於存儲數值數據非常有用。嘗試運行以下語句檢索前面三維矩陣的元素:
print(x2 [0, 0, 0])
print(x2 [1, 1, 2])
print(x2[:, 1, 1])
Ndarrays屬性通過它們的屬性,我們可以了解更多關於它們的信息。首先,讓我們看看演示中的所有屬性。這個例子使用了我們之前使用的那個3D矩陣:
x2 = np.array([[[1, 2, 3], [4, 5, 6]],[[0, -1, -2], [-3, -4, -5]]], np.int16)
我們可以通過下面的語句來了解維度的數目:
print(x2.ndim)
輸出返回維度數:
3
然後我們可以按照如下方式輸出ndarray的形狀(shape):
print(x2.shape)
形狀表示維度的大小,如下所示:
(2, 2, 3)
我們可以通過如下方式確定成員的數據類型:
print(x2.dtype)
以下是輸出:
int16
我們還可以了解存儲所需的內存大小(元素數目)和字節數,如下所示:
print(x2.size)print(x2.nbytes)
輸出如下:
1224
我們可以用以下代碼計算它的轉置:
print(x2.T)
Numpy常量NumPy庫中有許多有用的數學和科學常量,它們都可以用在程序裡。以下代碼段列印所有這些重要的常量:
print(np.inf)
print(np.NAN)
print(np.NINF)
print(np.NZERO)
print(np.PZERO)
print(np.e)
print(np.euler_gamma)
print(np.pi)
輸出如下:
inf
nan
-inf
-0.0
0.0
2.718281828459045
0.5772156649015329
3.141592653589793
總結本章介紹了NumPy和ndarrays的基礎知識。NumPy庫非常廣泛,包括許多程序,甚至還有專門介紹Numpy的書。就我們的目標而言,因為我們需要它們來進行可視化演示,所以我們將在接下來的章節中探索NumPy庫中的更多程序。
下一章將介紹一些ndarray創建程序以及使用Matplotlib進行數據可視化的基礎知識。