【发布时间】:2014-04-26 15:57:33
【问题描述】:
我在 Python 中有以下示例:
import numpy as np
import timeit
# array size
m = 3000
# square array
a = np.random.rand(m, m)
# column vector
b = np.random.rand(m)
# solve
ti = timeit.default_timer()
x = np.linalg.solve(a, b)
tf = timeit.default_timer()
# solve function
def solver(a, b):
x = np.linalg.solve(a, b)
return x
tii = timeit.default_timer()
x = solver(a, b)
tff = timeit.default_timer()
print('time1 ', tf-ti)
print('time2 ', tff-tii)
不使用函数(time1)与使用函数(time2)的时间比较是:
time1 0.6199771239989786
time2 0.5945519460001378
这两种方法似乎略有不同。函数solver 的输入参数是如何处理的,是被复制还是只是传递到函数内部?
【问题讨论】:
-
如果以相反的顺序运行测试,时间会发生什么变化?
-
@AShelly 这很有趣,如果我以相反的顺序运行测试,时间就会切换
-
哦,是的,没有额外的函数调用会更慢 ;-) 当然,在第一次调用之前,有一些初始化需要完成。
-
没有复制,当然,numpy 数组作为指针传递。您可以使用内存分析器进行检查,或者通过初始化使用一半以上内存的
a来进行更多临时检查,并查看它不会崩溃,至少在调用求解器之前 -
非常有趣,反转——指向一些初始化开销。但无论如何,这两个时间值真的在统计上彼此不同吗?每个的标准错误是什么?
标签: python python-3.x numpy timeit