Python案例实操
定义计算矩阵转置的函数
首先写出矩阵,并且定义一个打印矩阵的函数
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
def printmatrix(m):
# 要注意matrix是列表嵌套列表,所以ele也是列表
for ele in m:
for e in ele:
# 这样打印了一行
print("%2d" % e, end = ' ')
print("\n") # 或者直接print('')也能实现类似功能,前者换两行,后者换一行
printmatrix(matrix)
- 我们还要明确转置之后的结果:
1 5 9
2 6 10
3 7 11
4 8 12
使用循环进行转置
# 方法一
def transform (m):
# m[0]有几个元素,说明原矩阵有几列
# 经过这样的循环推导式,列变成了行
rt = [[] for i in m[0]]
for ele in m:
for i in range(len(ele)):
# rt[i]代表新矩阵的第i行,ele[i]代表原矩阵的当前行的第i列
rt[i].append(ele[i])
return rt
print('-' * 12)
printmatrix(transform(matrix))
- 要记得使用append方法,以及语法的灵活性,python语言不是c语言,他的灵活程度比c语言高得多。
使用zip函数
- zip函数的作用是合并多个序列,多个序列第一个元素合并成第一个元素,多个序列的第二个元素合并成第二个元素。
- 运用逆向参数收集即可。
def transform(m):
# 逆向参数收集,将矩阵中的多个列表转换成多个参数,传给zip
return list(zip(*m))
print('-' * 12)
printmatrix(transform(matrix))
- 可见,这种方式非常简洁,这也是python语言的强大之处了。
使用numpy模块中的transpose函数。
- numpy模块提供了
transpose()
函数执行转置,该函数的返回值是numpy内置类型:array
。 - 调用array的
tolist()
方法即可将array转换为list列表。
# 方法三
import numpy
def transform(m):
return numpy.transpose(m).tolist()
print('-' * 12)
printmatrix(transform(matrix))
- 注意如果没有numpy模块,需要在终端输入
sudo apt-get install python3-numpy
来进行下载。