'''
由于安装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=celse:e=x[i][j]f=f+[e]d=d+[f]else:d=d+[x[i]]passreturn(d)
def aaac(x,b):'''len(x)被b整除。返回列表x按照b列分割为矩阵后的结果'''c=1d=[]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+1d=[]passreturn(e)
def aaad(x):'''返回矩阵x转化为单层列表后的结果'''a=[]for i in x:for j in i:a=a+[j]passreturn(a)
#矩阵运算
def aaae(z,y):'''两个长度相等的向量相乘'''a=0for 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)))passreturn(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)passreturn(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])passreturn(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])passreturn(x)