小白的機器學習實戰 向量,矩陣和陣列

2021-08-21 07:39:04 字數 3933 閱讀 9807

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種水果型別的炸彈。保證距離最近的炸彈,距離它們最遠 尋找最大分類間距 轉而通過拉格朗日函式求優化的問題 尋找最大間隔 為什...