1.给定整数类型的mate1(m行d列)和mate2(d行n列),返回矩阵相乘后的结果
m×n矩阵。矩阵均用二维列表表示。
def matrx_mutiple(mate1,mate2):
m=len(mate1)
n=len(mate2[0])
res=[[0]*n for i in range(m)]
for i in range(m):
for j in range(n):
sum=0
for k in range(len(mate1[0])):
sum+=mate1[i][k]*mate2[k][j]
res[i][j]=sum
return res
测试用例:
mate1=[[1,2],[1,3]]
mate2=[[1,1],[1,0]]
print(matrx_mutiple(mate1,mate2))
>>>[[3, 1], [4, 1]]
2.实现矩阵的转置
1.zip()
a=[[1,2,3],[4,5,6]]
>>>list(zip(*a))# *号进行解包
>[[1,4],[2,5],[3,6]]
2.列表推导式
a=[[1,2,3],[4,5,6]]
>>>[[martx[i][j] for i in range(len(a)) ] for j in range(len(a[0]))]
3.矩阵按照对角线转置
def fun4(lst):
m=len(lst)
#xind和yind分别是新矩阵每行开头元素的横纵坐标
xind=[i for i in range(m)]
xind.extend([m-1 for i in range(m-1)])
yind=[0 for i in range(m)]
yind=[i for i in range(1,m)]
#>>>xind=[0,1,2,2,2]
#>>>yind=[0,0,0,1,2]
ans=[[0]*m for i in range(2*m-1)]#结果矩阵初始化
for i in range(len(xind)):
x,y=xind[i],yind[i]
j=0
while True:
ans[i][j] = lst[x][y]
x-=1#行号应该减小
y+=1#列号增加
j+=1
if x<0 or y>=m:#越界就跳出循环
break
return ans