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
矩阵加法
一般需要满足两者为同型矩阵,但有时候当列数或者行数为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