1.真题来源
2.重点
要是矩阵乘法运算,点乘运算和转置运算。根据运算法则并结合数组下标利用for循环编写相关函数。
3.运行结果
PS:在矩阵乘法运算中花了很长时间,先是根据运算法则利用for循环,理清下标之间的关系花了很长时间,第二是写完出错了,通过print函数检查错误点在矩阵乘法这个函数的编写,之后通过debug发现在求和过程有些问题,一步步去看去算最终才解决。因此,在问题出现时不要害怕,也不要停滞不前,一步步去查,多一点耐心,在才开始没想明白的时候可以用笨一点的方法一点点去验算结果是否准确。运行超时了。参考了CCF-CSP真题《202305-2 矩阵运算》思路+python,c++满分题解_矩阵运算csp-CSDN博客发现,运行超时可通过改变矩阵运算的先后顺序改变。对比两个解题思路,我是直接写了一个运算函数,具有一般性,参考的代码是解决该问题。
4.Python运行代码
n, d = map(int, input().split())
Q = [[i for i in map(int, input().split())]for j in range(n)]
K = [[i for i in map(int, input().split())]for j in range(n)]
V = [[i for i in map(int, input().split())]for j in range(n)]
W = [i for i in map(int, input().split())]
def zhuanzhi(K):
K_T = []
for i in range(d):
K_T_1 = []
for j in range(n):
K_T_1.append(K[j][i])
K_T.append(K_T_1)
return K_T
def jucheng(Q, K):
juchen = []
x = len(Q)
y = len(Q[0])
z = len(K[0])
for i in range(x):
juchen_1 = []
for k in range(z):
sum = 0
for j in range(y):
sum += Q[i][j] * K[j][k]
juchen_1.append(sum)
juchen.append(juchen_1)
return juchen
def diancheng(W, Q):
x = len(Q)
y = len(Q[0])
X = []
for i in range(x):
X_1 =[]
for j in range(y):
X_1.append(W[i]*Q[i][j])
X.append(X_1)
return X
output = jucheng(diancheng(W, jucheng(Q, zhuanzhi(K))), V)
for i in range(len(output)):
for j in range(len(output[0])):
print(output[i][j], end=' ')
print(end='\n')
5.根据参考思路更改后
5.1代码如下
output = diancheng(W, jucheng(Q, jucheng(zhuanzhi(K), V)))