'''
由于安装numpy和scipy太过糟心,而且不是自己定义出来的函数使用得终究不顺手;
因此我用二阶列表在此定义了矩阵,并定义了两个常用的矩阵运算:点乘与转置。
如果有必要的话,还可以在此基底下定义其他复杂运算。
这样一来,就不需要安装函数包了。
本文所有函数皆已通过测试,在其定义域下运行正确。
对于非默认定义域,每个函数的注释的第一句有说明。
'''
#矩阵生成
def aaaa(a,b):
    '''a,b均为正整数。返回a行b列的矩阵,每个元素都是零'''
    c=[]
    d=[]
    for i in range(b):
        c=c+[0]
    for i in range(a):
        d=d+[c]
    return(d)
def aaab(x,a,b,c):
    '''将矩阵x的第a行第b列的元素修正为c'''
    d=[]
    f=[]
    for i in range(len(x)):
        if i==a-1:
            for j in range(len(x[i])):
                if j==b-1:
                    e=c
                else:
                    e=x[i][j]
                f=f+[e]
            d=d+[f]
        else:
            d=d+[x[i]]
        pass
    return(d)
def aaac(x,b):
    '''len(x)被b整除。返回列表x按照b列分割为矩阵后的结果'''
    c=1
    d=[]
    e=[]
    for i in range(len(x)):
        if i<(c*b-1):
            d=d+[x[i]]
        elif i==(c*b-1):
            d=d+[x[i]]
            e=e+[d]
            c=c+1
            d=[]
        pass
    return(e)
def aaad(x):
    '''返回矩阵x转化为单层列表后的结果'''
    a=[]
    for i in x:
        for j in i:
            a=a+[j]
        pass
    return(a)
#矩阵运算
def aaae(z,y):
    '''两个长度相等的向量相乘'''
    a=0
    for i in range(len(z)):
        a=a+z[i]*y[i]
    return(a)
def aaaf(z,a):
    '''矩阵z中所有第a列的项所构成的向量'''
    x=[]
    for i in z:
        x=x+[i[a-1]]
    return(x)
def aaag(z,y):
    '''z的列数等于y的行数。两个矩阵点乘'''
    x=aaaa(len(z),len(y[0]))
    for i in range(len(x)):
        for j in range(len(x[0])):
            x=aaab(x,i+1,j+1,aaae(z[i],aaaf(y,j+1)))
        pass
    return(x)
def aaah(z,n):
    '''矩阵数乘'''
    y=aaaa(len(z),len(z[0]))
    for i in range(len(z)):
        for j in range(len(z[0])):
            y=aaab(y,i+1,j+1,z[i][j]*n)
        pass
    return(y)
def aaai(z,y):
    '''两个大小相同的矩阵相加'''
    x=aaaa(len(z),len(z[0]))
    for i in range(len(z)):
        for j in range(len(z[0])):
            x=aaab(x,i+1,j+1,z[i][j]+y[i][j])
        pass
    return(x)
def aaaj(z):
    '''转置矩阵'''
    x=aaaa(len(z[0]),len(z))
    for i in range(len(z[0])):
        for j in range(len(z)):
            x=aaab(x,i+1,j+1,z[j][i])
        pass
    return(x)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐