$ python3 -m timeit -s 'Np = 80' 'zeroArray = [0]*Np
zeroMatrix = [None] * Np
for i in range(Np):
zeroMatrix[i] = zeroArray[:]'
10000 loops, best of 3: 72.8 usec per loop
$ python3 -m timeit -s 'Np = 80' 'zeroMatrix = [[0] * Np for i in range(Np)]'
10000 loops, best of 3: 85 usec per loop
$ python3 -m timeit -s 'Np = 80' 'zeroMatrix = [[0 for _ in range(Np)] for _ in range(Np)]'
1000 loops, best of 3: 566 usec per loop
>python -m timeit -s "import numpy; Np = 80" "zeroMatrix = numpy.zeros((Np, Np))"
100000 loops, best of 3: 4.36 usec per loop
>python -m timeit -s "Np = 80" "zeroArray = [0]*Np" "zeroMatrix = [None] * Np" "for i in range(Np):" " zeroMatrix[i] = zeroArray[:]"
10000 loops, best of 3: 62.5 usec per loop
>python -m timeit -s "Np = 80" "zeroMatrix = [[0] * Np for i in range (Np)]"
10000 loops, best of 3: 77.5 usec per loop
>python -m timeit -s "Np = 80" "zeroMatrix = [[0 for _ in range(Np)] for _ in range(Np)]"
1000 loops, best of 3: 474 usec per loop
你可以这样做:
更新:好吧,如果我们要进入一场比赛,我发现(在我的电脑上)比无所不在的“方法”更快的东西。这当然比不上numpy,但这都是学术性的,对吧?我是说我们在讨论微秒。
我认为这是有效的,因为它避免了
append
和避免了预分配zeroMatrix
。我的测试结果:
这可能会稍微更有效率:
你真正想要的不会像你希望的那样奏效。这是因为,如果使用
*
创建列表元素的Np
副本,则会获得对同一事物的Np
引用。对于0
来说,这没什么大不了的,因为你只需在添加任何内容时获得一个新的数字。但是对于列表,你会得到一个矩阵,当你改变一行的任何元素时,整个列都会随之改变。这是迄今为止提到的第二快的方法:
我不能自己使用基于numpy的解决方案,因为我的系统上没有Python3的numpy包。但它的速度绝对要快得多。
也许你应该考虑使用NumPy。你好像在做数字工作,这就是它的目的。这是迄今为止最快的,不包括import语句:
次数:
相关问题 更多 >
编程相关推荐