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)
更多推荐
所有评论(0)