概述
本题目对数学基本知识带有一定的考察,首先,需要知道矩阵的乘法怎么算、一个向量点乘矩阵怎么算,具体的知识在线性代数有详细讲述,编码实现这俩功能。然后,在算 Q × K T ) ) × V Q \times K^T)) \times V Q×KT))×V的过程中,通过对元素的预处理、交换运算次序的方式,对程序进行改进以减少时间使用、空间使用。题目版权归CCF所有,真题跳转官网查看。
真题来源: 矩阵运算
官网地址:www.cspro.org(模拟考试入口)
题目分析
有大小为 n 行 d 列( n × d n \times d n×d)的三个矩阵 Q、K、V ,以及长度为n的一维行向量W,在依次输入 Q、K、V ,W 的每个元素后,计算 ( W ⋅ ( Q × K T ) ) × V (W \cdot (Q \times K^T)) \times V (W⋅(Q×KT))×V并输出计算结果,其中 K T K^T KT为 K 的转置。
暴力题解
- 第一步,接受参数 n 行 d 列,构造并初始化矩阵 Q、K、V ,由于是无序的,可统一存在矩阵字典 matrix 中,键为矩阵名,值是二维列表。
- 第二步,构造并初始化 W 和 K T K^T KT 。W 直接存在一维列表; K T K^T KT需要对 K 遍历,将 K [ i ] [ j ] K[i][j] K[i][j]存储在 K T [ j ] [ i ] K^T[j][i] KT[j][i]处。
- 第三步,实现 一维向量 W · 点乘的功能 _dot。参数 _a 表示 W ,_b 表示 ( Q × K T ) (Q \times K^T) (Q×KT)部分,两个for循环,使得 ( Q × K T ) (Q \times K^T) (Q×KT)第i行每一个值✖️W第i个值。
- 第四步,实现矩阵叉乘的功能 _cro。参数 _a 和 _b 分别乘号代表左、右两边的矩阵,设 _a 为 n × d n \times d n