我怎么能做向量矩阵乘法在python没有numpy?



好吧,我知道这个问题之前已经问过好几次了,但他们都有不同的错误

所以我是一个初学者在python和我们给了代数实用的python向量矩阵乘法

,这是我的代码,但我得到一个特定的错误,每次这是列表索引超出范围第20行d v = m[我][j] * [j] .

我真的不明白这个错误的原因是什么!

请帮

下面是我的代码:

r=int(input("enter rows"))
c=int(input("enter columns"))
m=[]
for i in range(r):
m.append([])
for j in range(c):
e=int(input("enter element"))
m[i].append(e)
for i in range(r):
print(m[i])
vm=input("enter vector [ vector matrix] n v :")
v=[]
v=[int(x) for x in vm.split()]
print('vector v ',v)
print('Vector-Matrix multiplication:')
for i in range (c):
re=0
for j in range(len(v)):
d=m[i][j]*v[j]
re+=d
print('[',re,']')
um=input("enter vector[ matrix -vector ]n u :")
u=[]
u=[int(x)for x in um.split()]    
print('vector u',u)
print("matrix vector multiplication")
for i in range(r):
res=0
for j in range(len(u)):
c=m[i][j]*u[j]
res+=c
print('[',res,']') 

i正在索引d=m[i][j]*v[j]中的行,但是您的循环超过了列的数量。您可以通过直接遍历行来消除这样的错误,并使代码更简洁。不是for i in range (c):,而是for row in m:d=row[j]*v[j]。您还应该利用sum函数来做点积。将这些组合在一起,您最终将替换

for i in range (c):
re=0
for j in range(len(v)):
d=m[i][j]*v[j]
re+=d
print('[',re,']')

for row in m:
re=sum(row[j] * v[j] for j in range(v)]
print('[',re,']')

如果你真的需要一个递增索引,那么enumerate函数可以提供它,例如:

for i, row in enumerate(m):
re=sum(row[j] * v[j] for j in range(v)]
print(f'{i}.  [{re}]')

最新更新