【Python】Coding the Matrix:Week 3 The Matrix

本文详细介绍了矩阵类的实现方法,包括矩阵加法、转置、与向量及另一矩阵的乘法运算,并提供了相应的函数实现。通过实例演示了如何使用这些函数进行矩阵操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写Homework之前需要写Matrix的一些函数,也就是完成Matrix Class Homework。这篇文章也就先写到这里先。

这个类主要实现矩阵的加法,转置,矩阵和向量的乘法,矩阵和矩阵的乘法。

from vec import *

def getitem(M, k):
    "Returns the value of entry k in M.  The value of k should be a pair."
    assert k[0] in M.D[0] and k[1] in M.D[1]
    if k in M.f:return M.f[k]
    else:return 0

def setitem(M, k, val):
    "Sets the element of v with label k to be val.  The value of k should be a pair"
    assert k[0] in M.D[0] and k[1] in M.D[1]
    M.f.update({(k[0],k[1]):val})

def add(A, B):
    "Returns the sum of A and B"
    assert A.D == B.D
    return Mat((A.D[0],A.D[1]),{(x,y):getitem(A,(x,y))+getitem(B,(x,y)) for x in A.D[0] for y in A.D[1]})

def scalar_mul(M, alpha):
    "Returns the product of scalar alpha with M" 
    return Mat((M.D[0],M.D[1]),{(x,y):getitem(M,(x,y))*alpha for x in M.D[0] for y in M.D[1]})

def equal(A, B):
    "Returns true iff A is equal to B"
    assert A.D == B.D
    return {getitem(A,(x,y))==getitem(B,(x,y)) for x in A.D[0] for y in A.D[1]}=={True}

def transpose(M):
    "Returns the transpose of M"
    return Mat((M.D[1],M.D[0]),{(y,x):getitem(M,(x,y)) for x in M.D[0] for y in M.D[1]})

def vector_matrix_mul(v, M):
    "Returns the product of vector v and matrix M"
    assert M.D[0] == v.D
    return Vec(M.D[1],{y:sum([v[x]*getitem(M,(x,y)) for x in M.D[0]]) for y in M.D[1]})

def matrix_vector_mul(M, v):
    "Returns the product of matrix M and vector v"
    assert M.D[1] == v.D
    return Vec(M.D[0],{x:sum([getitem(M,(x,y))*v[y] for y in M.D[1]]) for x in M.D[0]})

def matrix_matrix_mul(A, B):
    "Returns the product of A and B"
    assert A.D[1] == B.D[0]
    return Mat((A.D[0],B.D[1]),{(x,y):sum([getitem(A,(x,k))*getitem(B,(k,y)) for k in A.D[1]]) for x in A.D[0] for y in B.D[1]})


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值