矩阵乘法 点积 哈达玛积 线性代数 机器学习 numpy

Multiplication

1.Hadamard product(哈达玛积)

形式:

A * B

定义:

a,b 都是 i x j 的同阶矩阵,设 c 是两者哈达玛积后的结果

c(i) = a(i) * b(i)

e.g.

a = np.array([1,2,3]),b = np.array([4,5,6])

c = a * b = [4,10,18](当然,输出的时候肯定看不到逗号)

a’ = np.array([[1,2,3],[4,5,6]]),b’ =np.array([[1,-1,1],[6,7,8]])

c’ = a’ * b’ = [[1,-2,3],[24,35,48]]


2. Dot product(点积)

形式:

c = a·b = (a^T)* b

a·b = ||a|| * ||b|| * cos(a,b) (a,b之间的夹角)

前者为两个向量,后者 a^T 指示矩阵a的转置,转置的原因是因为需要满足矩阵相乘的原则:

前一个矩阵的列数等于后一个矩阵的行数

注意,这里的点积结果为实数,而非矩阵,即两者的shape为(1,n),(n,1),结果为1 x 1的矩阵,所以要变成数字,还需要np.sum

e.g.

import numpy as np

th = np.array([[0], [0]])
data = np.array([[-3, 2, -1, 1], [3, 2, 1, 5]])
print(np.sum(np.dot(th.T, data[:, 0:1])))
#0

Basic Rules

矩阵加法

一般需要满足两者为同型矩阵,但有时候当列数或者行数为1的时候,只满足行数相等或者列数相等即可

#行数相等,列数为1的矩阵的每一行把另一个矩阵的对应行元素都相加一遍
th0s = np.array([[1], [-1], [1]])
o = np.array([[1, 2], [3, 4], [5, 6]])
print(th0s + o)
#[[2 3]
# [2 3]
# [6 7]]
#列数相等,行数为1的矩阵的每一列把另一个矩阵的对应列元素都相加一遍
th0s = np.array([[1, -1]])
o = np.array([[1, 2], [3, 4], [5, 6]])
print(th0s + o)
#[[2 1]
# [4 3]
# [6 5]]

比较

>>> A = np.array([[1,1,1],[2,2,2],[3,3,3]])
>>> B = np.array([[1,2,3]])
>>> A==B
array([[ True, False, False],
       [False,  True, False],
       [False, False,  True]])
#类似上面的逻辑,行数为1,那就遍历列数,比如B的第一个元素1,1 == 1,1 != 2,1 != 3

你可能感兴趣的:(ML,机器学习,python,线性代数,numpy,矩阵)