ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【李刚-21天通关Python-22】之 实操:定义计算矩阵转置的函数

2019-08-06 16:37:30  阅读:221  来源: 互联网

标签:11 10 12 21 22 转置 ele print matrix


【李刚-21天通关Python-22】之 实操:定义计算矩阵转置的函数

方法一:嵌套循环转置

  • 首先创建一个长度与原矩阵第一个元素长度相等的新列表
  • 使用遍历原矩阵的每个元素(每个元素都是列表),再使用嵌套循环遍历每个元素,将列表中的元素添加到新列表对应的列表元素中
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

def print_matrix (m):
	for ele in m:
		for e in ele:
			print("%2d" % e, end=' ')
		print('')
		
def transform_matrix (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_matrix(matrix)
'''
 1   2   3   4
 5   6   7   8
 9  10  11  12
13  14  15  16
'''

print_matrix(transform_matrix(matrix))
'''
 1   5   9
 2   6  10
 3   7  11
 4   8  12
'''

方法二:使用zip函数转置

  • zip 函数的作用是合并多个序列:多个序列第一个元素合并成第一个元素,多个序列第二个元素合并成第二个元素,……
    zip函数示意图
  • 运用逆向参数收集
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

def print_matrix (m):
	for ele in m:
		for e in ele:
			print("%2d" % e, end=' ')
		print('')
		
def transform_matrix (m):
	# zip([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]) -> (1, 5, 9), ……
	# 逆向参数收集,将矩阵中的多个列表转换成多个参数传给zip
	return list(zip(*m))

print_matrix(matrix)
'''
 1   2   3   4
 5   6   7   8
 9  10  11  12
13  14  15  16
'''

print_matrix(transform_matrix(matrix))
'''
 1   5   9
 2   6  10
 3   7  11
 4   8  12
'''

方法三:使用numpy模块转置

  • numpy模块提供了 transpose() 函数执行转置,该函数返回值是numpy的内置类型:array
  • 调用array的 tolist() 方法即可将array转换为list列表
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

def print_matrix (m):
	for ele in m:
		for e in ele:
			print("%2d" % e, end=' ')
		print('')
		
def transform_matrix (m):
	import numpy
	return tolist(numpy.transpose(m))

print_matrix(matrix)
'''
 1   2   3   4
 5   6   7   8
 9  10  11  12
13  14  15  16
'''

print_matrix(transform_matrix(matrix))
'''
 1   5   9
 2   6  10
 3   7  11
 4   8  12
'''

标签:11,10,12,21,22,转置,ele,print,matrix
来源: https://blog.csdn.net/weixin_43796325/article/details/98626623

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有