这是我拥有的代码,但我不断收到错误:
import numpy as n
mat=n.arrary([(2,3),(4,5)])
vect=n.array([1,2])
def mat_vect_mult(mat,vect):
res=n.array([0,0])
for i in range(len(mat)):
for j in range(len(mat[0])):
res[i][j]+=[i][j]*vect[j]
return res
mat1=n.arrary([(2,3),(4,5)])
mat2=n.arrary([(2,3),(4,5)])
def mat_mat_mult(mat1,mat2):
res=n.array(((0,0),(0,0)))
for i in range(len(mat1)):
for j in range(len(mat2[0])):
for k in range(len(mat2)):
res[i][j]+=mat1[i][k]*mat2[k][j]
return res
答案 0 :(得分:0)
第一个建议:导入 Numpy 导入为 np 时, 就像全世界一样。
要将数组乘以向量,请将函数定义为:
def mat_vect_mult(mat, vect):
res = np.zeros_like(mat)
for i in range(mat.shape[0]):
for j in range(mat.shape[1]):
res[i][j] += mat[i][j] * vect[j]
return res
您的代码包含 arrary (删除最后一个 r )。 您也无法将数组名称放在 + = 之后。 我还更改了在两个循环中创建 res 和范围的方式。
然后运行mat_vect_mult(mat, vect)
得到:
array([[ 2, 6],
[ 4, 10]])
运行mat * vect
可获得相同的结果( mat 中的每一行
乘以 vect )。
要大量增加两个矩阵,请将函数更改为:
def mat_mat_mult(mat1, mat2):
res = np.zeros_like(mat)
for i in range(mat1.shape[0]):
for j in range(mat2.shape[1]):
for k in range(mat1.shape[1]):
res[i][j] += mat1[i][k] * mat2[k][j]
return res
我更改了 res 的创建方式和所有循环的范围:
您的代码仅适用于形状为(2,2)的数组。
然后运行:mat_mat_mult(mat1, mat2)
得到:
array([[16, 21],
[28, 37]])
与运行mat1 @ mat2
相同的结果。