Questions tagged «performance»

对于与代码的度量或改进以及应用程序效率有关的问题。

14
检查列表中是否存在值的最快方法
最快的方法是什么才能知道列表中是否存在值(列表中包含数百万个值)及其索引是什么? 我知道列表中的所有值都是唯一的,如本例所示。 我尝试的第一种方法是(在我的实际代码中为3.8秒): a = [4,2,3,1,5,6] if a.count(7) == 1: b=a.index(7) "Do something with variable b" 我尝试的第二种方法是(速度提高了2倍:实际代码为1.9秒): a = [4,2,3,1,5,6] try: b=a.index(7) except ValueError: "Do nothing" else: "Do something with variable b" 堆栈溢出用户建议的方法(我的实际代码为2.74秒): a = [4,2,3,1,5,6] if 7 in a: a.index(7) 在我的真实代码中,第一种方法耗时3.81秒,第二种方法耗时1.88秒。这是一个很好的改进,但是: 我是使用Python /脚本的初学者,有没有更快的方法来完成相同的事情并节省更多的处理时间? 我的应用程序更具体的说明: 在Blender API中,我可以访问粒子列表: particles = [1, …
815 python  performance  list 

27
获得两个列表之间的差异
我在Python中有两个列表,如下所示: temp1 = ['One', 'Two', 'Three', 'Four'] temp2 = ['One', 'Two'] 我需要用第一个列表中没有的项目创建第三个列表。从示例中,我必须得到: temp3 = ['Three', 'Four'] 有没有循环和检查的快速方法吗?

2
当正好遍历8192个元素时,为什么我的程序运行缓慢?
这是有问题的程序的摘录。矩阵img[][]的大小为SIZE×SIZE,并初始化为: img[j][i] = 2 * j + i 然后,创建一个矩阵res[][],并将此处的每个字段作为img矩阵中周围9个字段的平均值。为简单起见,边框保留为0。 for(i=1;i<SIZE-1;i++) for(j=1;j<SIZE-1;j++) { res[j][i]=0; for(k=-1;k<2;k++) for(l=-1;l<2;l++) res[j][i] += img[j+l][i+k]; res[j][i] /= 9; } 这就是程序的全部内容。为了完整起见,这是之前的内容。之后没有代码。如您所见,这只是初始化。 #define SIZE 8192 float img[SIZE][SIZE]; // input image float res[SIZE][SIZE]; //result of mean filter int i,j,k,l; for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) img[j][i] = (2*j+i)%8196; 基本上,当SIZE为2048的倍数时,该程序运行缓慢,例如执行时间: SIZE = 8191: 3.44 secs …




5
为什么[]比list()快?
我最近比较了[]和的处理速度,并list()惊讶地发现它的[]运行速度是的三倍以上list()。我跑了相同的测试与{}和dict(),结果几乎相同:[]和{}两个花了大约0.128sec /百万次,而list()并dict()把每个粗0.428sec /万次。 为什么是这样?不要[]和{}(可能()和'',太)立即传回了一些空的股票面值的副本,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素? 我不知道这两种方法有何不同,但我很想找出答案。我在文档中或SO上都找不到答案,而寻找空括号却比我预期的要麻烦得多。 通过分别调用timeit.timeit("[]")和timeit.timeit("list()"),和timeit.timeit("{}")和timeit.timeit("dict()")来比较列表和字典,以获得计时结果。我正在运行Python 2.7.9。 我最近发现“ 为什么True慢于if? ”比较了if Trueto 的性能,if 1并且似乎触及了类似的文字对全局场景;也许也值得考虑。

12
如果PyPy快6.3倍,为什么我不应该在CPython上使用PyPy?
我已经听到很多有关PyPy项目的信息。他们声称它比其站点上的CPython解释器快6.3倍。 每当我们谈论诸如Python之类的动态语言时,速度都是头等大事。为了解决这个问题,他们说PyPy快6.3倍。 第二个问题是并行性,臭名昭著的Global Interpreter Lock(GIL)。为此,PyPy表示可以提供无GIL的Python。 如果PyPy可以解决这些巨大的挑战,那么它的哪些弱点正在阻碍广泛采用?也就是说,是什么原因导致我这样的人,一个典型的Python开发,切换到PyPy 现在?

18
与Project Euler的速度比较:C,Python,Erlang,Haskell
我已经采取了问题#12从项目欧拉作为编程锻炼和比较我的(肯定不是最优的)实现在C,Python和Erlang和Haskell的。为了获得更高的执行时间,我搜索的第一个三角形数的除数大于1000,而不是原始问题中所述的500。 结果如下: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s 蟒蛇: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s 带有PyPy的Python: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s Erlang: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl -s …

8
建议使用哪个Python内存分析器?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我想知道我的Python应用程序的内存使用情况,尤其想知道哪些代码块/部分或对象消耗了最多的内存。Google搜索显示商用的是Python Memory Validator(仅限Windows)。 开源的是PySizer和Heapy。 我没有尝试过任何人,所以我想知道哪个是最好的考虑因素: 提供大多数细节。 我必须要做最少的更改,也可以不做任何更改。

7
何时在MongoDB上使用CouchDB,反之亦然
我陷入了这两个NoSQL数据库之间。 在我的项目中,我将在数据库中创建数据库。例如,我需要一个创建动态表的解决方案。 因此,用户可以创建具有列和行的表。我认为MongoDB或CouchDB都将对此有所帮助,但我不确定是哪一个。我还将需要有效的分页。

19
存储PHP数组的首选方法(json_encode与序列化)
我需要在平面文件中存储多维关联数据数组以进行缓存。我可能偶尔会遇到需要将其转换为JSON以便在我的Web应用程序中使用的情况,但是绝大多数时候,我将直接在PHP中使用该数组。 在此文本文件中将数组存储为JSON或PHP序列化数组会更有效吗?我环顾四周,似乎在最新版本的PHP(5.3)json_decode中实际上比快unserialize。 我目前倾向于将数组存储为JSON,因为如果有必要,我认为它很容易被人阅读,并且可以不费吹灰之力就可以在PHP和JavaScript中使用,从我的阅读中来看,它甚至可能是解码速度更快(不过不确定编码)。 有人知道有什么陷阱吗?任何人都有良好的基准可以显示这两种方法的性能优势?

30
不得已的性能优化策略[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 这个站点上已经有很多性能问题,但是据我所知,几乎所有问题都是针对特定问题的,而且范围很窄。几乎所有人都会重复建议,以免过早优化。 假设: 该代码已经正常工作 选择的算法已经针对问题的情况进行了优化 代码已被测量,并且违规例程已被隔离 所有优化的尝试也将得到衡量,以确保它们不会使情况变得更糟 我在这里寻找的是策略和技巧,这些方法和技巧可以使关键算法中的最后几个部分都挤到最后几个百分点,而除了它需要做的事情之外,别无其他。 理想情况下,请尝试使答案与语言无关,并在适用时指出建议策略的任何不利方面。 我将添加带有自己的初步建议的回复,并期待Stack Overflow社区可以想到的其他任何内容。

23
哪个更快:while(1)或while(2)?
这是一位高级经理提出的面试问题。 哪个更快? while(1) { // Some code } 要么 while(2) { //Some code } 我说这两者具有相同的执行速度,因为内部表达式while最终应求值为trueor false。在这种情况下,两个true条件都求和,并且条件内部没有额外的条件指令while。因此,两者将具有相同的执行速度,我更喜欢while(1)。 但是面试官充满信心地说:“检查您的基础知识。while(1)比更快while(2)。” (他没有测试我的信心) 这是真的? 另请参见:“ for(;;)”是否比“ while(TRUE)”更快?如果没有,人们为什么要使用它?

8
哪种方法效果更好:.Any()与.Count()> 0?
在System.Linq名称空间中,我们现在可以将IEnumerable扩展为具有Any()和Count() 扩展方法。 最近有人告诉我,如果我要检查集合中是否包含1个或多个项目,则应该使用.Any()扩展方法而不是.Count() > 0扩展方法,因为.Count()扩展方法必须遍历所有项目。 其次,一些集合具有属性(未扩展方法),其是Count或Length。使用这些代替而不是.Any()或会更好.Count()? 是/否?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.