enumerate用法和转置矩阵求解、效率测试

enumerate用法和转置矩阵求解、效率测试

枚举函数:
enumerate(iterable[, start]) – > iterator for index, value of iterable
返回一个可迭代对象,将原有可迭代对象的元素和从start开始的数字配对。

练习题:

clipboard

解答:
#方法1,列表扫描追加法
import datetime
matrix = [[1,2,3], [4,5,6]]
tm = []
count = 0
for row in matrix:
for i,col in enumerate(row):
if len(tm) < i + 1: # row有m列,tm就要就要有m行
tm.append([])
tm[i].append(col)
count += 1
print(matrix)
print(tm)
print(count)

#方法2,直接开辟目标空间,矩阵元素交换法(避免引用类型)
matrix = [[1,2,3], [4,5,6]]
tm = [[0 for col in range(len(matrix))] for row in range(len(matrix[0]))]
count = 0
# tm = []
# for row in range(len(matrix[0])):
# tm.append([])
# for col in range(len(matrix)):
# tm[row].append(0)
for i,row in enumerate(tm):
for j,col in enumerate(row):
tm[i][j] = matrix[j][i] #matrix元素搬到tm
count += 1
print(matrix)
print(tm)
print(count)

效率测试:
datetime 或者 %%timeit(Ipython中)

import datetime
matrix = [[1,2,3], [4,5,6], [7,8,9]]
start = datetime.datetime.now()
for c in range(100000):
tm = [] #目标矩阵
for row in matrix:
for i, item in enumerate(row):
if len(tm) < i + 1:
tm.append([])
tm[i].append(item)
delta = (datetime.datetime.now() – start).total_seconds()
print(delta)
print(matrix)
print(tm)

start = datetime.datetime.now()
for c in range(100000):
tm = [0]* len(matrix[0])
for i in range(len(tm)):
tm[i] = [0] * len(matrix)
for i, row in enumerate(tm):
for j, col in enumerate(row):
tm[i][j] = matrix[j][i]
delta = (datetime.datetime.now() – start).total_seconds()
print(delta)
print(matrix)
print(tm)

matrix = [[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6]]

clipboard2

4*4开始,先开辟空间效率更高啦!

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95539

(0)
JacoJaco
上一篇 2018-04-08 21:08
下一篇 2018-04-08 21:20

相关推荐

  • Python递归函数、生成器以及匿名函数

    Python递归函数、生成器以及匿名函数

    2018-04-15
  • Python学习第十三周总结

    网络协议和管理、http服务和Apache

    2018-06-03
  • Python数据结构

    数据结构个人总结,方便以后查找。

    Python笔记 2018-04-01
  • 装饰器

    装饰器 需求 一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息 def add(x, y): return x + y 增加信息输出功能 def add(x, y): print(“call add, x + y”)  # 日志输出到控制台 return x + y p 上面的加法函数是完成了需求,但是有以下的缺点 打…

    Python笔记 2018-04-23
  • 函数

    函数、参数、参数解构
    返回值、作用域
    递归函数
    匿名函数、
    生成器

    2018-04-16
  • Python内置数据结构——字符串

    知识结构图 学习笔记 字符串 字符组成的有序序列,字符的集合 使用单引号、双引号、三引号引起来的字符序列 不可变对象 Unicode类型 定义 单引号、双引号、三引号 r、R:引号内的字符原样输出 元素访问 索引访问 可迭代 join连接 “string“.join(iteratable) 使用string作为分隔符将可迭代对象连接起…

    2018-03-31