花书笔记1——向量乘法、矩阵乘积(相乘)、内积、点积都是什么、Python代码实现、区别及联系

目录

前言

向量

定义

与矩阵的关系

向量的乘法运算

矩阵

定义

矩阵乘积运算

Python代码

区别与联系

举例

总结

重点区别

点积与矩阵相乘的联系


前言

看“花书”的过程中碰到这样一句话

两个相同维数的向量x 和y 的点积(dot product)可看作是矩阵乘积x⊤y。

明明在讲矩阵相乘,怎么又扯到点积了?还有向量……

之前学得懵懵懂懂,为了深度学习,我仔细找资料写下这篇博客,送给与我一样情况的小伙伴。

PS:“花书”为图书AI圣经《深度学习》,由全球知名的三位专家 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville联合撰写,是深度学习领域奠基性的经典教材。

向量

定义

向量是一列数。

举例:向量x

与矩阵的关系

向量可以看作只有一列的矩阵

向量的转置可以看作是只有一行的矩阵

向量x的转置:

向量的乘法运算

向量有很多运算,本文只说向量的乘法运算。

数量积(又叫内积、点积dot product; scalar product)

设二维空间内有两个向量  和  ,定义它们的数量积(又叫内积、点积)为以下实数:

更一般地,n维向量的内积定义如下:

参考百度百科

 

矩阵

定义

矩阵是一个二维数组

矩阵乘积运算

矩阵有很多运算,本文只说矩阵乘积运算。

A为  的矩阵,B为  的矩阵,那么称  的矩阵C为矩阵AB的乘积,记作  ,

其中矩阵C中的第 行第  列元素可以表示为:

矩阵相乘的前提条件:

矩阵A 的形状是m\times p,矩阵B 的形状是p\times n,C 的形状是m\times n

有两个矩阵A, B如下:

矩阵A的维数为3x2,矩阵B的维数为2x3,那么A、B相乘的结果矩阵C应该为3x3,其中m=3,p=2,n=3

根据公式,其中i, j取值范围为[1, 3], p=2

得出矩阵C各个元素为如下表格

即矩阵C为3x3的矩阵

 

简单地记:结果矩阵C的第(i, j)个元素为矩阵A的第 i 行与矩阵B的第 j 列分别相乘后求和的结果。

Python代码

写了一个简单的矩阵乘积方法,与np.dot(A, B, C)的结果是一样的。供参考。
以下方法的缺点是没法进行大数字的矩阵计算,比如A的维数为1000*10000,B的维数为10000*10000的情况.还需要再改进。

np.dot(A, B, C)也不能进行这么大数字的矩阵计算。

各位如果有更好的方法欢迎留言。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np


def dot(A, B):
    row = A.shape[0]
    column = B.shape[1]
    p = A.shape[1]
    if A.shape[1] != B.shape[0]:
        return
    # 创建一个矩阵C,维数为row*column, 其值全部为零
    C = np.zeros((row, column), dtype=A.dtype)
    print("A.shape, B.shape, C.shape:", A.shape, B.shape, C.shape)
    # 计算矩阵相乘结果
    for i in range(row):
        for j in range(column):
            for k in range(p):
                C[i, j] += A[i, k] * B[k, j]
    return C


if __name__ == '__main__':
    A = np.arange(3, 9).reshape(2, 3)
    B = np.arange(1, 7).reshape(3, 2)
    C = np.zeros((2, 2), dtype=int)
    print("matrix A:\n", A)
    print("matrix B:\n",B)
    np.dot(A, B, C)
    print("np.dot C:\n", C)

    c = dot(A, B)
    print("my dot C:\n", c)
    assert C.any() == c.any()
    assert C.all() == c.all()


区别与联系

两个相同维数的向量x 和y 的点积(dot product)可看作是矩阵乘积x⊤y。

举例

以二维向量举例说明,这个比较简单好理解。二维看明白了就可以扩展地理解更多维数。

假设二维向量x和y分别为

x和y的点积(dot product)为如下

将它们写成矩阵形式就是如下

矩阵x转置后为,维数为1x2;矩阵y的维数为2x1;两个矩阵相乘,根据公式得到1x1的矩阵,如下

敲黑板了!

总结

重点区别

两个向量点积结果是一个实数(即标量)

两个矩阵相乘结果是一个矩阵

重点:书上的原话中的“可看作” 不代表 "就是"

点积与矩阵相乘的联系

可以把矩阵乘积C = AB看作是矩阵A 的第i 行和矩阵B 的第j 列之间的点积。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值