相关疑难解决方法(0)

测量Python中经过的时间?

我想要的是开始在我的代码中的某个地方计算时间,然后获得通过的时间,以测量执行少量功能所花费的时间.我认为我使用的是timeit模块错误,但文档对我来说只是让人困惑.

import timeit

start = timeit.timeit()
print("hello")
end = timeit.timeit()
print(end - start)
Run Code Online (Sandbox Code Playgroud)

python performance timeit measure

1031
推荐指数
32
解决办法
116万
查看次数

检查一个数字是否是一个完美的正方形

我怎么能检查一个数字是否是一个完美的正方形?

速度无关紧要,现在,只是工作.

python math perfect-square

70
推荐指数
8
解决办法
13万
查看次数

为什么numpy.power比内衬慢60倍?

也许我正在做一些奇怪的事情,但是在使用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)

python arrays performance numpy

23
推荐指数
3
解决办法
6260
查看次数

numpy和matlab之间的性能差异

我正在计算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)

python performance matlab numpy backpropagation

22
推荐指数
1
解决办法
2万
查看次数

Python 3:在范围(N)列表理解中创建[func(i)for i的最有效方法

假设我有一个函数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)

重新编辑:从以前的编辑中删除了误导性信息.

python list-comprehension

7
推荐指数
1
解决办法
1442
查看次数

通过iPython和伪控制台运行doctests

我有一个相当基本的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)

python django ipython

2
推荐指数
1
解决办法
2029
查看次数

使用Python中的参数测量函数的时间

我试图测量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)

python performance time arguments timeit

2
推荐指数
1
解决办法
4511
查看次数