草庐IT

OPTIMIZATION

全部标签

python - python中的慢递归

我知道这个主题讨论得很好,但我遇到了一个案例,我不太明白递归方法为什么比使用“reduce、lambda、xrange”的方法“慢”。deffactorial2(x,rest=1):ifx我知道python不会优化尾递归,所以问题不在于此。据我了解,生成器仍应使用+1运算符生成n个数字。所以从技术上讲,fact(n)应该像递归一样添加一个数字n次。reduce中的lambda将被调用n次,就像递归方法一样...所以因为我们没有尾调用优化在这两种情况下,堆栈都将被创建/销毁并返回n次。生成器中的if应该检查何时引发StopIteration异常。这让我想知道为什么递归方法仍然比另一种方法

python - 从列表/队列中删除一些项目的快速方法

这是对类似question的跟进其中问最好的写法foriteminsomelist:ifdetermine(item):code_to_remove_item似乎共识是关于类似的东西somelist[:]=[xforxinsomelistifnotdetermine(x)]但是,我认为如果您只删除几个项目,则大部分项目都会被复制到同一个对象中,这可能会很慢。在answer到另一个相关的question,有人建议:foriteminreversed(somelist):ifdetermine(item):somelist.remove(item)但是,这里的list.remove将搜索列

python - 为什么在 python 中使用指数取模更快?

我试图优化我正在修补的程序,当我注意到执行value=i%65536似乎比执行value=i%(2**16)。为了对此进行测试,我运行了以下程序:importcProfileimportpstatsAMOUNT=100000000deftest1():foriinxrange(AMOUNT):value=i%65536returndeftest2():foriinxrange(AMOUNT):value=i%(256**2)returndeftest3():foriinxrange(AMOUNT):value=i%(16**4)returndeftest4():foriinxrange

python - Pandas 扩展/滚动窗口相关性计算与 p 值

假设我有一个DataFrame,我想在其上计算两列之间的滚动或扩展Pearson相关性importnumpyasnpimportpandasaspdimportscipy.statsasstdf=pd.DataFrame({'x':np.random.rand(10000),'y':np.random.rand(10000)})借助内置的pandas功能,计算速度非常快expanding_corr=df['x'].expanding(50).corr(df['y'])rolling_corr=df['x'].rolling(50).corr(df['y'])但是,如果我希望获得与这些相

python - Pandas 扩展/滚动窗口相关性计算与 p 值

假设我有一个DataFrame,我想在其上计算两列之间的滚动或扩展Pearson相关性importnumpyasnpimportpandasaspdimportscipy.statsasstdf=pd.DataFrame({'x':np.random.rand(10000),'y':np.random.rand(10000)})借助内置的pandas功能,计算速度非常快expanding_corr=df['x'].expanding(50).corr(df['y'])rolling_corr=df['x'].rolling(50).corr(df['y'])但是,如果我希望获得与这些相

python - 在 Python 中快速检查范围

我有很多[(1,1000),(5000,5678),...]形式的范围。我试图找出检查数字是否在任何范围内的最快方法。范围由longs组成,并且太大而无法仅保留所有数字的集合。最简单的解决方案是这样的:ranges=[(1,5),(10,20),(40,50)]#Therealcodehasafewdozenrangesnums=range(1000000)%timeit[nforninnumsifany([r[0]Banyan快一点:importbanyanbanyan_ranges=banyan.SortedSet(updator=banyan.OverlappingInterva

python - 在 Python 中快速检查范围

我有很多[(1,1000),(5000,5678),...]形式的范围。我试图找出检查数字是否在任何范围内的最快方法。范围由longs组成,并且太大而无法仅保留所有数字的集合。最简单的解决方案是这样的:ranges=[(1,5),(10,20),(40,50)]#Therealcodehasafewdozenrangesnums=range(1000000)%timeit[nforninnumsifany([r[0]Banyan快一点:importbanyanbanyan_ranges=banyan.SortedSet(updator=banyan.OverlappingInterva

python - 为什么 SQL 聚合函数比 Python 和 Java(或穷人的 OLAP)慢得多

我需要一个真正的DBA的意见。Postgres8.3在我的MacbookPro上执行此查询需要200毫秒,而Java和Python执行相同的计算不到20毫秒(350,000行):SELECTcount(id),avg(a),avg(b),avg(c),avg(d)FROMtuples;这是使用SQL数据库时的正常行为吗?架构(表格包含对调查的回复):CREATETABLEtuples(idintegerprimarykey,ainteger,binteger,cinteger,dinteger);\copytuplesfrom'350,000responses.csv'delimite

python - 为什么 SQL 聚合函数比 Python 和 Java(或穷人的 OLAP)慢得多

我需要一个真正的DBA的意见。Postgres8.3在我的MacbookPro上执行此查询需要200毫秒,而Java和Python执行相同的计算不到20毫秒(350,000行):SELECTcount(id),avg(a),avg(b),avg(c),avg(d)FROMtuples;这是使用SQL数据库时的正常行为吗?架构(表格包含对调查的回复):CREATETABLEtuples(idintegerprimarykey,ainteger,binteger,cinteger,dinteger);\copytuplesfrom'350,000responses.csv'delimite

python - 使用类型提示将 Python 翻译成 Cython

Python3.5版本现在提供类型提示。在规范(PEP484)中,目标(和非目标)被清楚地暴露出来:RationaleandGoalsThisPEPaimstoprovideastandardsyntaxfortypeannotations,openingupPythoncodetoeasierstaticanalysisandrefactoring,potentialruntimetypechecking,and(perhaps,insomecontexts)codegenerationutilizingtypeinformation.[...]Ofthesegoals,static