相关疑难解决方法(0)

提高python代码的速度

我有一些python代码有很多类.我曾经cProfile发现运行程序的总时间是68秒.我发现在一个被调用的类中,以下函数Buyers需要大约60秒的68秒.我必须运行程序大约100次,所以任何速度的提高都会有所帮助.你能建议通过修改代码来提高速度吗?如果您需要更多有用的信息,请告诉我们.

def qtyDemanded(self, timePd, priceVector):
    '''Returns quantity demanded in period timePd. In addition,
    also updates the list of customers and non-customers.

    Inputs: timePd and priceVector
    Output: count of people for whom priceVector[-1] < utility
    '''

    ## Initialize count of customers to zero
    ## Set self.customers and self.nonCustomers to empty lists
    price = priceVector[-1]
    count = 0
    self.customers = []
    self.nonCustomers = []


    for person in self.people:
        if person.utility >= price:             
            person.customer = 1
            self.customers.append(person)
        else:
            person.customer …
Run Code Online (Sandbox Code Playgroud)

python performance

14
推荐指数
2
解决办法
4636
查看次数

Python中的Euler 5项目 - 如何优化我的解决方案?

我最近一直在研究Python中的Project Euler问题.我对Python很陌生,作为程序员还是有点新鲜.

无论如何,我遇到了与速度相关的问题,为问题#5编写了解决方案.问题是,

"2520是可以除以1到10之间的每个数字而没有任何余数的最小数字.可以被1到20的所有数字整除的最小正数是多少?"

我已经检查了一些,我无法找到任何与Python有关的问题.有一些已完成的脚本,但我想避免完全查看其他代码,如果可能的话,而不是想改进我自己的代码.

我编写的代码成功运行2520的示例和范围1到10,并且应该可以直接修改以处理问题.但是,在运行它时,我没有得到答案.据推测,这是一个非常高的数字,代码不够快.打印正在检查的当前号码似乎支持这一点,达到数百万而没有得到答案.

代码,在它的当前实现如下:

rangemax = 20
def div_check(n):
    for i in xrange(11,rangemax+1):
        if n % i == 0:
            continue
        else:
            return False
    return True

if __name__ == '__main__':
   num = 2
   while not div_check(num):
       print num
       num += 2
   print num
Run Code Online (Sandbox Code Playgroud)

我已经做了一些改变,我认为应该有助于提高速度.首先,对于一个数字可以被所有数字1到20整除,它必须是偶数,因为只有偶数可以被2整除.因此,我可以增加2而不是1.此外,虽然我没有想到我自己,我发现有人指出一个可以被11到20整除的数字可以被1到10整除.(没有检查那个,但似乎合理)

但代码仍然不够快.我可以进行哪些优化(程序化或数学)来使这段代码运行得更快?

提前感谢任何可以提供帮助的人.

python

9
推荐指数
3
解决办法
4万
查看次数

如何加速这个Python代码?

我有一个以下微小的Python方法,它是迄今为止性能热点(根据我的分析器,在这里花费了大约95%的执行时间)在一个更大的程序中:

def topScore(self, seq):
    ret = -1e9999
    logProbs = self.logProbs  # save indirection
    l = len(logProbs)
    for i in xrange(len(seq) - l + 1):
        score = 0.0
        for j in xrange(l):
            score += logProbs[j][seq[j + i]]
        ret = max(ret, score)

    return ret
Run Code Online (Sandbox Code Playgroud)

代码是在Python的Jython实现中运行,而不是CPython,如果这很重要的话. seq是一个DNA序列串,大约有1,000个元素. logProbs是一个词典列表,每个位置一个.目标是找到任何长度l(大约10-20个元素)的子序列的最大分数seq.

我意识到所有这些循环由于解释开销而效率低下,并且在静态编译/ JIT语言中会更快.但是,我不愿意切换语言.首先,我需要一个JVM语言用于我正在使用的库,这种约束我的选择.其次,我不想将此代码批量转换为较低级别的JVM语言.但是,如果有必要,我愿意用其他东西重写这个热点,虽然我不知道如何连接它或者开销是多少.

除了这种方法的单线程缓慢之外,我还无法让程序在并行化方面超过4个CPU.鉴于它几乎所有的时间都花在我发布的10行热点上,我无法弄清楚这里的瓶颈是什么.

python java performance jvm jython

6
推荐指数
1
解决办法
473
查看次数

Python有点慢.我怎样才能加快这段代码的速度?

Python令我失望.我搜索了一个代码进行端口扫描,发现了这个.跑了.我用来扫描的程序.根据python代码它非常快.代码如下.
你能帮我加速我的代码吗?我能为它做什么?

#!/usr/bin/env python  
from socket import *   

if __name__ == '__main__':  
    target = raw_input('Enter host to scan: ')  
    targetIP = gethostbyname(target)  
    print 'Starting scan on host ', targetIP  

    #scan reserved ports  
    for i in range(20, 1025):  
        s = socket(AF_INET, SOCK_STREAM)  

        result = s.connect_ex((targetIP, i))  

        if(result == 0) :  
            print 'Port %d: OPEN' % (i,)  
        s.close()
Run Code Online (Sandbox Code Playgroud)

python performance

-3
推荐指数
2
解决办法
307
查看次数

标签 统计

python ×4

performance ×3

java ×1

jvm ×1

jython ×1