import numpy as np
# 建立矩陣
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]])
# 行向量
vector_row = np.array([1, 2, 3])
# 列向量
vector_column = np.array([[1],
[2],
[3]])
# 計算均值
np.mean(matrix)
>>> 6.5
# 計算方差
np.var(matrix)
>>> 11.916666666666666
# 計算標準差
np.std(matrix)
>>> 3.4520525295346629
# 第二維可以為-1讓程式自己推斷,如matrix.reshape(2, -1)
matrix.reshape(2, 6)
>>> array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
# 建立矩陣a
matrix_a = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 2]])
# 建立矩陣b
matrix_b = np.array([[1, 3, 1],
[1, 3, 1],
[1, 3, 8]])
# 矩陣相加
np.add(matrix_a, matrix_b)
array([[ 2, 4, 2],
[ 2, 4, 2],
[ 2, 4, 10]])
# 矩陣相減
np.subtract(matrix_a, matrix_b)
array([[ 0, -2, 0],
[ 0, -2, 0],
[ 0, -2, -6]])
# 建立乙個方法:對每個元素加10
add_100 = lambda i: i + 10
# 在對numpy的陣列進行操作時,我們應該盡量避免迴圈操作,盡可能利用向量化函式來避免迴圈。但是,直接將自定義函式應用在numpy陣列之上會報錯,我們需要將函式進行向量化轉換.
vectorized_add_100 = np.vectorize(add_100)
# 最後將函式應用到矩陣上
vectorized_add_100(matrix)
>>> array([[11, 12, 13],
[14, 15, 16],
[17, 18, 19],
[20, 21, 22]])
# 建立乙個矩陣,其中零元素遠遠多於非零元素
matrix = np.array([[0, 0],
[1, 0],
[0, 6]])
# 由於稀疏矩陣中非零元素較少,零元素較多,因此可以採用只儲存非零元素的方法來進行壓縮儲存。
# 另外對於很多元素為零的稀疏矩陣,僅儲存非零元素可使矩陣操作效率更高,速度更快。
# python不能自動建立稀疏矩陣,所以要用scipy中特殊的命令來得到稀疏矩陣。
from scipy import sparse
matrix_sparse = sparse.csr_matrix(matrix)
# 檢視行和列
matrix.shape
>>> (4, 3)
# 檢視所有元素個數(行*列)
matrix.size
>>> 12
# 檢視維數
matrix.ndim
>>> 2
# 最大值
np.max(matrix)
>>> 12
# 最小值
np.min(matrix)
>>> 1
# 按列查詢最大元素
np.max(matrix, axis=0)
>>> array([10, 11, 12])
# 按行查詢最大元素
np.max(matrix, axis=1)
>>> array([3, 6, 9,12])
# 建立乙個新矩陣
matrix_n = np.array([[1, 2],
[3, 4]])
# 計算逆矩陣
np.linalg.inv(matrix_n)
>>> array([[-2. , 1. ],
[ 1.5, -0.5]])
matrix.flatten()
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 對乙個向量
vector = np.array([1, 2, 3, 4, 5, 6])
vector[1]
>>> 2
# 對於乙個矩陣
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
matrix[1,1]
>>> 5
對於乙個張量(高維矩陣)
tensor = np.array([
[[[1, 1], [1, 1]], [[2, 2], [2, 2]]],
[[[3, 3], [3, 3]], [[4, 4], [4, 4]]]
])tensor[1,1,1]
>>> array([4, 4])
vector_a = np.array([1,2,3])
vector_b = np.array([4,5,6])
# 方法一
np.dot(vector_a, vector_b)
>>> 32
# 方法二
vector_a @ vector_b
>>> 32
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 行列式:行列式(determinant)是數學中的乙個函式,將乙個 n*n的矩陣a對映到乙個標量,記作det(a)或|a|
np.linalg.det(matrix)
>>> -9.5161973539299405e-16
# 先獲得矩陣的對角線
matrix.diagonal()
>>> array([1, 5, 9])
# 對角線求和就是跡
matrix.diagonal().sum()
>>> 15
np.linalg.matrix_rank(matrix)
>>> 2
# 建立乙個向量
vector = np.array([1, 2, 3, 4, 5, 6])
# 轉置
vector.t
>>> array([1, 2, 3, 4, 5, 6])
# 建立乙個矩陣
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 轉置
matrix.t
>>> array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
參考:
機器學習實戰 機器學習實戰 支援向量機(一)
從分類效力來講,svm在無論線性還是非線性分類中,都十分出色 現在桌子上有一些雜亂的 小球 我們想要將他們分開 我們可以放一根棒棒上去 是不是看起來還行,小棍將藍色球和紅色球分開。但這時,又有個人把一顆紅色的小球放在了棍子的另一邊,這樣就有乙個球似乎落在了錯誤的一側,我們可能需要調整棒棒 所謂,sv...
機器學習實戰 支援向量機
有些人認為svm是最好的現成的分類器,這裡說的現成值得是分類器不加修改即可直接使用。同時,這意味著在資料上應用基本形式的svm分類器就可以得到低錯誤率的結果。svm能夠對訓練集之外的資料點作出很好的分類決策。svm有很多實現,本章只關注其中最流行的一種實現,即序列最小優化 smo 演算法。優點 泛化...
向量遍歷 機器學習實戰專案 支援向量機
支援向量機 support vector machines,svm 是一種機器學習演算法。支援向量機 場景 支援向量機 原理 svm 工作原理 對於上述的蘋果和香蕉,我們想象為2種水果型別的炸彈。保證距離最近的炸彈,距離它們最遠 尋找最大分類間距 轉而通過拉格朗日函式求優化的問題 尋找最大間隔 為什...