矩阵乘法为A @ B
或 np.dot(A, B)
,若为对应元素相乘则用A*B
或np.multiply(A,B)
A = np.array([[1,2],[3,4]])
B = np.array([[1,2],[1,2]])
C = A @ B
D = np.dot(A, B)
输出:
C、D均为:
[[ 3 6]
[ 7 14]]
注意:python中的array若给了初始值如a = np.array([1, 2, 3])
则不能用a = a.T
或a = np.transpose(a)
来进行转置,而用range、np.zeros()、np.ones()
等函数赋予初始值可以,这两种方法在a为多维矩阵时才也有效,但matrix可以用a.T
可以
a = np.array([1, 2, 3])
a = a.T
输出:[1 2 3]
a = range(4)
a = np.array([a]).T
输出:
[[0]
[1]
[2]
[3]]
注意:此处的相乘指的是两个矩阵对应位置上的元素相乘,若想实现矩阵的相乘,可以使用np.dot()
a = np.array(range(4))
a = np.array([a]).T
b = np.array(range(3))
c = a*b
输出:
a:输出形式如上
b:[0 1 2]
c:
[[0 0 0]
[0 1 2]
[0 2 4]
[0 3 6]]
矩阵m*n(n≠1)不可以和1*k相乘(k≠n):
a = [[1, 2],[3, 4],[5, 6]]
a = np.array(a)
b = np.array(range(3))
c = a*b # 不能相乘
输出:
a的shape为3*2,而b的shape为(3,),即一维数组,数组里有3个元素
矩阵m*k(n≠1)可以和1*k相乘:
a = [[1, 2],[3, 4],[5, 6]]
a = np.array(a)
b = np.array(range(2))
c = a*b # 不能相乘
输出:
a:
[[1 2]
[3 4]
[5 6]]
b:
[0 1]
c:
[[0 2]
[0 4]
[0 6]]
直接用A*B
即可,若想实现对应元素相乘,用np.multiply(A, B)
A = np.matrix([[1,2],[1,2]])
B = np.matrix([[1,3],[2,2]])
C = A * B
D = np.multiply(A, B)
输出:
A:
[[1 2]
[1 2]]
B:
[[1 3]
[2 2]]
C:
[[5 7]
[5 7]]
D:
[[1 6]
[2 4]]
a = np.matrix([3, 2])
a[0, 0] = a[0, 0] - 0.2
输出:
a:[[2 2]]
a = np.matrix([3, 2])
a[0, 0] = a[0, 0] - 4.2
输出:
a:[[-1 2]]
由于以上特性,故若相对一个matrix的所有元素重新赋值时,可以直接用对整体赋值而不是对其内部元素一个一个地赋值,比如:
应该这样写,
theta = theta - t
而不是这样写(这样得到的结果会向零取整):
theta[0, 0] = theta[0, 0] - t[0, 0]
theta[0, 1] = theta[0, 1] - t[0, 1]
例如:
a = np.matrix([3, 2])
c = np.matrix([0.5, 0.5])
a = a - c
输出:
a:[[2.5 1.5]]
a = np.matrix([3, 2])
c = np.matrix([0.5, 0.5])
a[0, 0] = a[0, 0] - c[0, 0]
a[0, 1] = a[0, 1] - c[0, 1]
输出:
a:[[2 1]]