MATLAB常用的矩陣操作對應numpy的矩陣操作
用慣了matlab中的操作,每次用numpy操作矩陣時總有些想不起來,這裏總結一下,便於記憶和後期查找。
- 初始化一個矩陣
matrix_a = [1 2 3; 4 5 6; 7 8 9] % in matlab
matrix_b = [3,2,1]
matrix_c = [2 3 1; 4 6 5; 1 2 3]
matrix_a = np.matrix([[1,2,3],[4,5,6], [7,8,9]], dtype = int) # in python, 默認dtype爲int
matrix_b = np.matrix([3,2,1])
matrix_c = np.matrix([[2,3,1],[4,6,5], [1,2,3]])
- 獲取矩陣行列數 m ,n
%獲取matrix_a 的行列數, in matlab
m = size(matrix_a, 1)
n = size(matrix_a, 2)
#獲取matrix_a的行列數, in nmupy
m = np.size(matrix_a, 0)
n = np.size(matrix_b, 1)
m = matrix_a.shape[0] # in python
n = matrix_a.shape[1]
- 矩陣轉置
% matlab
% marix_b.shape = [1,3], matrix_b_t.shape =[3,1]
matrix_b_t = matrix_b'
#numpy
matrix_b_t = np.transpose(matrix_b)
matrix_b_t = matrix_b.T #python可用 [.T]進行矩陣轉置
- 矩陣求逆
% matlab
%求marix_a的逆矩陣
a_inv = inv(matrix_a)
#python
a_inv = matrix_a.I
*測試結果不一致,暫時先記錄下
- 矩陣乘積
% Matlab
% 計算matrix_a , matrix_b 的乘積
matrix_d = matrix_a * matrix_b'
% 計算matrix_a , matrix_c 的點乘
matrix_e = matrix_a .* matrix_b
#numpy
matrix_d = np.dot(matrix_a, matrix.T)
matrix_e = np.multiply(matrix_a, matrix_c)
- 矩陣冪運算
% Matlab
%求矩陣 matrix_a 內元素的2次冪運算
result = matrix_a.^2
#numpy
result = np.power(matrix_a, 2)
result = matrix_a ** 2 # in python
- 求和
%Matlab
%求矩陣 matrix_a所有元素和
s_result = sum(sum(matrix_a))
s_row = sum(matrix_a, 1)
s_column = sum(matrix_a, 2)
#numpy
s_result = np.sum(matrix_a)
s_row = np.sum(matrix_a, 0)
s_column = np.sum(matrix_a, 1)
- 在矩陣中插入行列元素
%在matrix_a 的第一列前插入一列元素
new_matrix_a = [ones[m,1], matrix_a] % matlab
nwe_matrix_a = np.insert(matrix_a, 0, values =1 ,axis =1) # numpy
- 查找矩陣中的元素並輸出,如:機器學習中查找正負樣本對應的特徵值。
假設你有一個二分類訓練數據 : data如下。現分別取出正,負樣本對於的特徵值。
x1 | x2 | y |
5 | 4 | 1 |
3 | 2 | 0 |
5 | 3 | 1 |
10 | 5 | 0 |
#注意python小標從0開始,matlab從1開始
% Matlab
pos = find(data[:, 3] == 1) %正樣本
neg = find(data[:, 3] == 0) %負樣本
data[pos, 1] % 所有正樣本 x1 的值
data[pos, 2] % 所有正樣本 x2 的值
data[neg, 1] % 所有負樣本 x1 的值
data[neg, 2] % 所有負樣本 x2 的值
#numpy
pos = np.array(data[:, 2] == 1)
neg = np.array(data[:, 2] == 0)
# matlab 的find 函數返回的下標, 這裏是將符合條件(==1)的轉換爲布爾值(掩碼),再通過布爾值進行取值。
data[pos, 0]
data[pos, 1]
data[neg, 0]
data[pos, 1]
- 數組組合
1)水平組合(x):result = np.hstack((matrix_a, matrix_c)) shape of result is (6, 3)
2) 垂直組合 (y): result = np.vstack((matrix_a, matrix_c)) shape of result is (3, 6)
3) 深度組合 (z): result = np.dstack((matrix_a, matrix_c)) shape of result is (3, 3, 2)