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
下一篇 2018-04-08

相关推荐

  • 递归函数

    递归函数 def foo(b,b1=3):print(“foo1 called “,b,b1)def foo2(c):foo3(c)print(“foo2 called”,c)def foo3(d):print(“foo3 called”)def mian():print(“…

    2018-04-16
  • 内置数据结构

    list,tuple,str,bytes,bytearray,set,切片,分装解构,冒泡法

    2018-03-31
  • Python内建函数

    内建函数 标识id() 返回对象的唯一标识,CPython返回内存地址 哈希hash() 返回一个对象的hash值 类型type() 返回对象的类型 类型转换 int()、float()、bin()、hex()、oct()、bool()、list()、tuple()、dict()、set()、complex()、bytes()、bytearray() 输入i…

    2018-04-08
  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • Python递归函数、生成器以及匿名函数

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

    2018-04-15