好吧,我知道这个问题之前已经问过好几次了,但他们都有不同的错误
所以我是一个初学者在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}]')