機器學習入門——線性代數簡單回顧
阿新 • • 發佈:2019-01-05
本節課程回顧了一些簡單但常用的線性代數知識
很基礎的,我會直接跳過,並對矩陣的一些運算進行程式設計實現。
3.1 矩陣的加法和標量乘法
矩陣加法:要求行列數要相等,然後,每個元素對應相加。
exp:
矩陣的標量乘法:每個元素都要乘
exp:
3.2 矩陣的向量乘法
矩陣的向量乘法,就是矩陣和向量相乘。要求:矩陣的列數要與向量的行數相等!
exp:
如上例所示,2×3的矩陣乘以3×1的向量,得到2×1的向量。
3.3 矩陣的乘法
矩陣乘法:實際就是乘加運算,對應行和對應列的對應元素相乘後相加(如下圖所示)。注意:矩陣乘法中,前一個矩陣的列數要與後一個矩陣的行數相等。
矩陣乘法運算過程:
exp:
3.4 矩陣的轉置和逆
矩陣的轉置 定義矩陣A的轉置:有這樣一個矩陣B,滿足B=a(j,i),即b(j,i)=a(i,j)(B的第i行第j個元素是A的第j行第i個元素),記作
exp:
矩陣的逆 如矩陣A是一個m×m矩陣(即方陣),如果有逆矩陣,則:
矩陣可逆的條件
矩陣A可逆,則A為方陣,且A的行列式值不為0。反過來同樣成立!
方陣A的行列式如果為0,則為奇異方陣(singular)。
exp:
顯然,矩陣A與矩陣B相乘,結果為I(單位陣)。所以,A是B的逆陣,B也是A的逆陣。
3.5 程式設計實現矩陣基本運算
程式是使用Python2.7編寫,基於tensorflow框架。
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 17 12:24:29 2017
@author: louishao
"""
import tensorflow as tf
#Matrix addition
mata = tf.constant([[1,2],[3,4],[5,6]])
matb = tf.constant([[5,3],[2,4],[6,7]])
matadd = tf.add(mata,matb)
#Scalar multiplication
cons = tf.constant(3 )
mat1 = tf.constant([[1,2],[3,4],[5,6]])
scalmul = tf.mul(cons,mat1)
#Matrix vector multiplication
mat = tf.constant([[1,2,3],[4,5,6]])
vec = tf.constant([[1],[2],[3]])
matvecmul = tf.matmul(mat,vec)
#Matrix multiplication
m1 = tf.constant([[1,2],[2,3],[3,4]])
m2 = tf.constant([[2,1],[3,5]])
matmul = tf.matmul(m1,m2)
#Matrix transpose
mattt = tf.constant([[1,2],[3,4],[5,6]])
mattrans = tf.transpose(mattt)
#Matrix inverse
matt = tf.constant([[3.0,2.0,0.0],[2.0,1.0,2.0],[2.0,1.0,1.0]],'float32')
matinver = tf.matrix_inverse(matt)
with tf.Session() as sess:
print "Matrix addition"
print "the addition is \n%s"%(sess.run(matadd))
print "---------------------------"
print "Scalar multiplication"
print "the scalar multiplication is \n%s"%(sess.run(scalmul))
print "--------------------------"
print "Matrix vector multiplication"
print "the matrix vector multiplication is\n%s"%(sess.run(matvecmul))
print "--------------------------"
print "Matrix multiplication"
print "the matrix multiplication is\n %s"%(sess.run(matmul))
print "--------------------------"
print "Matrix transpose"
print "transpose is\n %s"%(sess.run(mattrans))
print "-------------------------"
print "Inverse matrix"
print "matrix inverse is \n%s"%(sess.run(matinver))
執行結果:
Matrix addition
the addition is
[[ 6 5]
[ 5 8]
[11 13]]
---------------------------
Scalar multiplication
the scalar multiplication is
[[ 3 6]
[ 9 12]
[15 18]]
--------------------------
Matrix vector multiplication
the matrix vector multiplication is
[[14]
[32]]
--------------------------
Matrix multiplication
the matrix multiplication is
[[ 8 11]
[13 17]
[18 23]]
--------------------------
Matrix transpose
transpose is
[[1 3 5]
[2 4 6]]
-------------------------
Inverse matrix
matrix inverse is
[[-0.99999994 -1.99999988 3.99999976]
[ 1.99999988 2.99999976 -5.99999952]
[-0. 1. -1. ]]