DL--numpy vs. matlab 矩陣常用運算(乘積運算, 點乘,轉置,冪運算, 求和,求逆,插入行列,獲取行列數,,,,)

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章