我想要的是开始在我的代码中的某个地方计算时间,然后获得通过的时间,以测量执行少量功能所花费的时间.我认为我使用的是timeit模块错误,但文档对我来说只是让人困惑.
import timeit
start = timeit.timeit()
print("hello")
end = timeit.timeit()
print(end - start)
Run Code Online (Sandbox Code Playgroud) 也许我正在做一些奇怪的事情,但是在使用numpy时可能会发现令人惊讶的性能损失,无论使用的功率如何都显得一致.例如,当x是随机的100x100阵列时
x = numpy.power(x,3)
Run Code Online (Sandbox Code Playgroud)
比约慢60倍
x = x*x*x
Run Code Online (Sandbox Code Playgroud)
各种阵列尺寸的加速图显示了一个最佳尺寸10k左右的阵列和其他尺寸的5-10倍速度.

在你自己的机器上测试下面的代码(有点乱):
import numpy as np
from matplotlib import pyplot as plt
from time import time
ratios = []
sizes = []
for n in np.logspace(1,3,20).astype(int):
a = np.random.randn(n,n)
inline_times = []
for i in range(100):
t = time()
b = a*a*a
inline_times.append(time()-t)
inline_time = np.mean(inline_times)
pow_times = []
for i in range(100):
t = time()
b = np.power(a,3)
pow_times.append(time()-t)
pow_time = np.mean(pow_times)
sizes.append(a.size)
ratios.append(pow_time/inline_time)
plt.plot(sizes,ratios)
plt.title('Performance of inline vs numpy.power')
plt.ylabel('Nx …Run Code Online (Sandbox Code Playgroud) 我正在计算backpropagation稀疏自动编码器的算法.我已经在python中使用numpy和实现了它matlab.代码几乎相同,但性能却大不相同.matlab完成任务所需的时间为0.252454秒,而numpy为0.973672151566,几乎是其四倍.我将在最小化问题中多次调用此代码,因此这种差异导致实现之间的几分钟延迟.这是正常行为吗?我如何才能提高numpy的性能?
Numpy实施:
Sparse.rho是调谐参数,sparse.nodes是节点的在隐藏层(25)的数量,sparse.input(64)在输入层,theta1和theta2节点的数量被用于第一和权重矩阵第二层的尺寸分别为25x64和64x25,m等于10000,rhoest的尺寸为(25,),x的尺寸为10000x64,a3 10000x64和a2 10000x25.
UPDATE:我已经根据响应的一些想法引入了代码中的更改.现在表现不佳:0.65对比matlab:0.25.
partial_j1 = np.zeros(sparse.theta1.shape)
partial_j2 = np.zeros(sparse.theta2.shape)
partial_b1 = np.zeros(sparse.b1.shape)
partial_b2 = np.zeros(sparse.b2.shape)
t = time.time()
delta3t = (-(x-a3)*a3*(1-a3)).T
for i in range(m):
delta3 = delta3t[:,i:(i+1)]
sum1 = np.dot(sparse.theta2.T,delta3)
delta2 = ( sum1 + sum2 ) * a2[i:(i+1),:].T* (1 - a2[i:(i+1),:].T)
partial_j1 += np.dot(delta2, a1[i:(i+1),:])
partial_j2 += np.dot(delta3, a2[i:(i+1),:])
partial_b1 += delta2
partial_b2 += delta3
print "Backprop time:", time.time() -t
Run Code Online (Sandbox Code Playgroud)
Matlab实现:
tic
for i = 1:m
delta3 = …Run Code Online (Sandbox Code Playgroud) 假设我有一个函数func(i)为一个整数i创建一个对象,N是一个非负整数.那么创建等于此列表的列表(不是范围)的最快方法是什么
mylist = [func(i) for i in range(N)]
Run Code Online (Sandbox Code Playgroud)
不采用像在C中创建函数的高级方法?我对上面列表理解的主要关注是,我不确定python是否事先知道预分配mylist的范围(N)的长度,因此必须逐步重新分配列表.是这样的情况还是python足够聪明,首先将mylist分配给长度N然后计算它的元素?如果没有,创建mylist的最佳方法是什么?也许这个?
mylist = [None]*N
for i in range(N): mylist[i] = func(i)
Run Code Online (Sandbox Code Playgroud)
重新编辑:从以前的编辑中删除了误导性信息.
我有一个相当基本的doctestable文件:
class Foo():
"""
>>> 3+2
5
"""
if __name__ in ("__main__", "__console__"):
import doctest
doctest.testmod(verbose=True)
Run Code Online (Sandbox Code Playgroud)
直接通过python运行时,它按预期工作.
但是,在iPython中,我得到了
1 items had no tests:
__main__
0 tests in 1 items.
0 passed and 0 failed.
Test passed.
Run Code Online (Sandbox Code Playgroud)
由于这是Django项目的一部分,并且需要访问所有适当的变量并且manage.py设置,我也可以通过修改后的命令运行它,该命令使用code.InteractiveConsole,其中一个结果是__name__设置到' __console__'.
使用上面的代码,我获得与iPython相同的结果.我尝试将最后一行更改为:
this = __import__(__name__)
doctest.testmod(this, verbose=True)
Run Code Online (Sandbox Code Playgroud)
__console__我猜到了一个ImportError ,这是有道理的.这对python或ipython都没有影响.
所以,我希望能够通过所有这三种方法成功运行doctests,尤其是InteractiveConsole方法,因为我希望很快就会需要Django小马魔法.
只是为了澄清,这是我所期待的:
Trying:
3+2
Expecting:
5
ok
1 items had no tests:
__main__
1 items passed all tests:
1 tests in __main__.Foo
1 tests in 2 items.
1 passed and …Run Code Online (Sandbox Code Playgroud) 我试图测量raw_queries(...)到目前为止的失败时间.我发现我应该使用timeit模块.问题是我不能(=我不知道如何)从环境中将参数传递给函数.
重要说明:在调用之前raw_queries,我们必须执行phase2()(环境初始化).
旁注:代码在Python 3中.
def raw_queries(queries, nlp):
""" Submit queries without getting visual response """
for q in queries:
nlp.query(q)
def evaluate_queries(queries, nlp):
""" Measure the time that the queries need to return their results """
t = Timer("raw_queries(queries, nlp)", "?????")
print(t.timeit())
def phase2():
""" Load dictionary to memory and subsequently submit queries """
# prepare Linguistic Processor to submit it the queries
all_files = get_files()
b = LinguisticProcessor(all_files)
b.loadDictionary()
# load the queries …Run Code Online (Sandbox Code Playgroud)