【问题标题】:how can i do vector-matrix multiplication in python without numpy?我如何在没有numpy的情况下在python中进行向量矩阵乘法?
【发布时间】:2022-11-30 03:44:46
【问题描述】:

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

所以我是 python 的新手,我们得到了一个代数实用的 python 向量矩阵乘法

这是我的代码,但我每次都会收到一个特定的错误 列表索引超出范围 第 20 行 d=m[i][j]*v[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,']') 

【问题讨论】:

    标签: python linear-algebra


    【解决方案1】:

    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}]')
    

    【讨论】:

    • 作为练习,看看您是否也可以消除 i, row 循环,以便 matrix * vector 操作是一个利用 sum 函数的单行列表理解。
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2015-03-30
    • 2021-10-12
    • 1970-01-01
    • 2018-05-02
    • 2023-01-11
    相关资源
    最近更新 更多