1. 程式人生 > 其它 >python 定義大小的空矩陣_一種使用Python定義矩陣運算的原始碼

python 定義大小的空矩陣_一種使用Python定義矩陣運算的原始碼

技術標籤:python 定義大小的空矩陣

'''
由於安裝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)