若是用表示全部实数的集合,那么咱们用
表示全部
的实数矩阵组成的向量空间,即:
算法
其中,大写字母(如)表示矩阵,带下标的小写字母(如
)表示矩阵中的元素。除了用
表示矩阵
中第
行第
列的元素以外,也能够用
和
表示。数组
矩阵转置(transposition):微信
矩阵加法(addition):spa
标量-矩阵乘法(scalar-matrix multiplication):scala
矩阵-矩阵乘法(matrix-matrix multiplication):code
矩阵点乘(pointwise multiplication):ip
矩阵点除(pointwise division):
注意,要使矩阵点除有意义,则分母矩阵中不能有值为0的元素。v8
咱们用表示全部长度为
的实数向量组成的向量空间,即:
get
其中,粗体小写字母(如)表示向量,带下标的小写字母(如
)表示向量中的元素。除了用
表示向量
中第
个元素以外,也能够用
和
表示。it
咱们用表示列向量,用
表示行向量,即:
向量加法(vector addition):
标量-向量乘法(scalar-vector multiplication):
内积/点积(inner/dot product):
向量点乘(pointwise multiplication):
向量点除(pointwise division):
注意,要使向量点除有意义,则分母向量中不能有值为0的元素。
“Saxpy”是“scalar a x plus y”的助记符,表示用的值更新
的值。Saxpy算法用公式表示为:
注意这里的“”不是相等符号,而是赋值符号。
若是把Saxpy算法中的标量换成矩阵,那么咱们就能获得广义(generalized)Saxpy算法,即Gaxpy算法:
其中,,
而且
。
咱们能够用两层for循环实现Gaxpy算法:
for i=1:m
for j=1:n
y(i)=y(i)+A(i,j)x(j)
end
end
在这段代码中,外层的for循环遍历矩阵的每一行,内层的for循环遍历矩阵的每一列,像这样一行一行地遍历矩阵的Gaxpy算法也称为面向行的(row-oriented)Gaxpy算法。
固然,咱们也能够一列一列地遍历矩阵,这样就有了面向列的(column-oriented)Gaxpy算法:
for j=1:n
for i=1:m
y(i)=y(i)+A(i,j)x(j)
end
end
不一样于向量和
的内积
,向量
和
的外积
表示以下:
其中,,
而且
。
和Gaxpy算法相似,外积也有面向行的外积:
for i=1:m
for j=1:n
A(i,j)=A(i,j)+x(i)y(j)
end
end
和面向列的外积:
for j=1:n
for i=1:m
A(i,j)=A(i,j)+x(i)y(j)
end
end
一个的矩阵能够看做是
个长度为
的行向量组成的:
同理,一个的矩阵也能够看做是
个长度为
的列向量组成的:
咱们能够用表示矩阵
的第
个行向量(第
行):
也能够用表示矩阵
的第
个列向量(第
列):
在此基础上,咱们能够重写面向行的Gaxpy算法:
for i=1:m
y(i)=y(i)+A(i,:)x
end
能够看出,面向行的Gaxpy算法其实是个内积操做加
个标量加法操做。
咱们接着重写面向列的Gaxpy算法:
for j=1:n
y=y+x(j)A(:,j)
end
能够看出,面向列的Gaxpy算法其实是个标量-向量乘法操做加
个向量加法操做。
对于外积,咱们先重写面向行的外积:
for i=1:m
A(i,:)=A(i,:)+x(i)y
end
能够看出,面向行的外积其实是个标量-向量乘法操做加
个行向量加法操做。
咱们接着重写面向列的外积:
for j=1:n
A(:,j)=A(:,j)+y(j)x
end
能够看出,面向列的外积其实是个标量-向量乘法操做加
个列向量加法操做。
咱们把矩阵-矩阵乘法写成用更新
的形式,即:
其中,,
而且
。
咱们把矩阵-矩阵乘法用三层for循环展开获得:
for i=1:m
for j=1:n
for k=1:r
C(i,j)=C(i,j)+A(i,k)B(k,j)
end
end
end
能够看出,矩阵-矩阵乘法其实是个标量乘法操做加
个标量加法操做。
若是咱们只展开外面两层for循环,则有:
for i=1:m
for j=1:n
C(i,j)=C(i,j)+A(i,:)B(:,j)
end
end
能够看出,矩阵-矩阵乘法其实是个内积操做加
个标量加法操做。
若是咱们只展开最外层的for循环,则有:
for i=1:m
C(i,:)=C(i,:)+A(i,:)B
end
能够看出,矩阵-矩阵乘法其实是个向量-矩阵乘法操做加
个向量加法操做。
虽然改变三层for循环的先后顺序并不影响矩阵-矩阵乘法的结果,可是能够方便咱们从不一样角度理解矩阵-矩阵乘法。这里只列出告终果,具体过程能够参考上述方法。
循环 顺序 |
两层循环 | 一层循环 | 两层循环对应的 数据访问方式 |
---|---|---|---|
i j k | 内积 | 向量-矩阵乘法 | 从A取行,从B取列 |
j i k | 内积 | 矩阵-向量乘法 | 从A取行,从B取列 |
i k j | Saxpy | 面向行的Gaxpy | 从B取行,从C取行 |
j k i | Saxpy | 面向列的Gaxpy | 从A取列,从C取列 |
k i j | Saxpy | 面向行的外积 | 从B取行,从C取行 |
k j i | Saxpy | 面向列的外积 | 从A取列,从C取列 |
和实数相对的是复数,所以咱们接下来介绍复数矩阵和复数向量。
咱们用表示全部复数组成的集合,用
表示全部
的复数矩阵构成的向量空间,而且用
表示全部长度为
的复数向量构成的向量空间。
若是矩阵,那么咱们用
和
分别表示矩阵A的实部和虚部,即:
,
。
虽然实数矩阵的大部分操做都适用于复数矩阵,可是也有一些操做不适用于复数矩阵。好比:
矩阵的共轭(conjugate)矩阵
:
其中,两个实部相等,虚部互为相反数的复数互为共轭复数(conjugate complex number)。
复数矩阵的转置(transposition)是共轭转置:
两个复数向量的内积(inner product):