Python中Numpy及Matplotlib使用
1. Jupyter Notebooks
作為小白,我現在使用的python編輯器是Jupyter Notebook
,非常的好用,推薦!!!
你可以按[Ctrl] + [Enter]
快捷鍵或按選單中的執行
按鈕來執行單元格。
在function(
後面按[shift] + [tab]
,可以獲得函式或物件的幫助。
你還可以通過執行function?
獲得幫助。
2. NumPy 陣列
操作numpy
陣列是 Python 機器學習(或者,實際上是任何型別的科學計算)的重要部分。 在這裡我主要快速介紹一下重要基本的功能。
import numpy as np
# 設定隨機種子來獲得可重複性
rnd = np.random.RandomState(seed=520)
# 生成隨機陣列
# Array: shape(3, 5);
# value: [0, 1]
X = rnd.uniform(low=0.0, high=1.0, size=(3, 5))
print(X)
(請注意,NumPy 陣列也是從 0 開始的索引)
# 元素訪問
# 獲取單個元素
# (這裡是第一行第一列的元素)
print(X[0, 0])
# 獲取一行
# (這裡是第二行)
print(X[1])
# 獲取一列
# (這裡是第二列)
print(X[:, 1])
# 陣列轉置
print(X.T)
# 建立均勻間隔的數字的行向量。
y = np.linspace(0, 12, 5) # 從0開始,到12結束,數量為5
print(y)
# 將行向量轉換為列向量
print(y[:, np.newaxis])
# 獲得形狀或改變陣列形狀
# 生成隨機陣列
rnd = np.random.RandomState(seed=520)
X = rnd.uniform(low=0.0, high=1.0, size=(3, 5))
# X的大小(3,5)
print(X.shape)
# 將 X 大小變為 (5,3)
X_reshaped = X.reshape(5, 3)
print(X_reshaped)
# 使用整數陣列的索引(花式索引)
indices = np.array([3, 1, 0])
print(indices)
# 取X的第4,2,1列作為新陣列
X[:, indices]
3. SciPy 稀疏陣列
雖然我們平時不會大量使用它們,但稀疏矩陣在某些情況下非常好用。 在一些機器學習任務中,尤其是與文字分析相關的任務,資料可能大多為零。 儲存所有這些零是非常低效的,並且以僅包含“非零”值的方式表示可以更有效。 我們可以建立和操作稀疏矩陣,如下所示:
# 建立一個包含大量零的隨機陣列
rnd = np.random.RandomState(seed=123)
X = rnd.uniform(low=0.0, high=1.0, size=(10, 5))
print(X)
# 將大多數元素設定為零
X[X < 0.7] = 0
print(X)
from scipy import sparse
# 將 X 轉換為 CSR(壓縮稀疏行)矩陣
X_csr = sparse.csr_matrix(X)
print(X_csr)
# 將稀疏矩陣轉換為密集陣列
print(X_csr.toarray())
(你可能偶然發現了一種將稀疏表示轉換為密集表示的替代方法:numpy.todense
;toarray
返回一個 NumPy 陣列,而todense
返回一個 NumPy 矩陣。在本教程中,我們將使用 NumPy 陣列,而不是矩陣;scikit-learn 不支援後者。)
CSR 表示對於計算非常有效,但它不適合新增元素。 為此,LIL(List-In-List)表示更好:
# 建立一個空的 LIL 矩陣並新增一些專案
X_lil = sparse.lil_matrix((5, 5))
for i, j in np.random.randint(0, 5, (15, 2)):
X_lil[i, j] = i + j
print(X_lil)
print(type(X_lil))
X_dense = X_lil.toarray()
print(X_dense)
print(type(X_dense))
通常,一旦建立了 LIL 矩陣,將其轉換為 CSR 格式很有用(許多 scikit-learn 演算法需要 CSR 或 CSC 格式)
X_csr = X_lil.tocsr()
print(X_csr)
print(type(X_csr))
可用於各種問題的可用稀疏格式包括:
CSR
(壓縮稀疏行)CSC
(壓縮稀疏列)BSR
(塊稀疏行)COO
(座標)DIA
(對角線)DOK
(鍵的字典)LIL
(列表中的列表)
scipy.sparse
子模組還有很多稀疏矩陣的函式,包括線性代數,稀疏求解器,圖演算法等等。
4. Matplotlib
機器學習的另一個重要部分是資料視覺化。 Python 中最常用的工具是matplotlib
。 這是一個非常靈活的包,我們將在這裡介紹一些基礎知識。
由於使用的是 Jupyter,所以使用 IPython 方便的內建“魔術函式”,即“matoplotlib
內聯”模式,它將直接在筆記本內部繪製圖形。
%matplotlib inline
import matplotlib.pyplot as plt
# 繪製直線
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x));
# 散點圖
x = np.random.normal(size=500)
y = np.random.normal(size=500)
plt.scatter(x, y);
# 使用 imshow 展示繪圖
# - note that origin is at the top-left by default!
x = np.linspace(1, 12, 100)
y = x[:, np.newaxis]
im = y * np.sin(x) * np.cos(y)
print(im.shape)
plt.imshow(im);
# 輪廓圖
# - 請注意,此處的原點預設位於左下角!
plt.contour(im);
# 3D 繪圖
from mpl_toolkits.mplot3d import Axes3D
ax = plt.axes(projection='3d')
xgrid, ygrid = np.meshgrid(x, y.ravel())
ax.plot_surface(xgrid, ygrid, im, cmap=plt.cm.viridis, cstride=2, rstride=2, linewidth=0);
有許多可用的繪圖型別。 檢視matplotlib庫是一個很快的學習方法。