Tag: 性能

为什么numpy的einsum比numpy的内置函数更快?

让我们从三个dtype=np.double数组开始。 计时是在英特尔CPU上使用nccu 1.7.1与icc编译并链接到英特尔mkl 。 用gcc不带mkl编译的numpy 1.6.1的AMD cpu也被用来validation时序。 请注意,时序规模几乎与系统规模成线性关系,并不是因为numpy函数中的小开销, if这些差异将以微秒而不是毫秒显示: arr_1D=np.arange(500,dtype=np.double) large_arr_1D=np.arange(100000,dtype=np.double) arr_2D=np.arange(500**2,dtype=np.double).reshape(500,500) arr_3D=np.arange(500**3,dtype=np.double).reshape(500,500,500) 首先让我们看一下np.sum函数: np.all(np.sum(arr_3D)==np.einsum('ijk->',arr_3D)) True %timeit np.sum(arr_3D) 10 loops, best of 3: 142 ms per loop %timeit np.einsum('ijk->', arr_3D) 10 loops, best of 3: 70.2 ms per loop 鲍尔斯: np.allclose(arr_3D*arr_3D*arr_3D,np.einsum('ijk,ijk,ijk->ijk',arr_3D,arr_3D,arr_3D)) True %timeit arr_3D*arr_3D*arr_3D 1 loops, best of 3: 1.32 s per loop %timeit np.einsum('ijk,ijk,ijk->ijk', […]

哈希表真的可以O(1)?

哈希表可以达到O(1)似乎是常识,但是这对我来说是没有意义的。 有人可以解释吗? 这里有两个想到的情况: A. 值是一个比散列表的大小小的int。 因此,这个值是它自己的哈希,所以没有哈希表。 但是,如果有的话,这将是O(1),仍然是低效的。 B. 你必须计算一个哈希值。 在这种情况下,查找数据大小的顺序是O(n)。 在O(n)工作之后,查找可能是O(1),但是在我眼中仍然是O(n)。 除非你有一个完美的散列表或一个大的散列表,否则每个存储桶可能有几个项目。 所以,无论如何它都会在某个点上进入一个小的线性search。 我认为散列表很棒,但是除非它是理论上的,否则我不会得到O(1)的称号。 维基百科关于散列表的文章始终引用常量查找时间,并完全忽略散列函数的成本。 这真的是一个公平的措施? 编辑:总结我学到的东西: 这在技术上是正确的,因为散列函数不需要使用密钥中的所有信息,因此可以是恒定的时间,并且因为足够大的表可以将冲突降低到接近恒定的时间。 在实践中是这样的,因为随着时间的推移,只要散列函数和表大小被select为使冲突最小化,即使这通常意味着不使用恒定时间散列函数,也可以实现。

将Java对象设置为null是否可以做任何事情?

我正在浏览一些旧书,并findPeter Hagger的“Practical Java”的副本。 在性能部分中,build议在不再需要时将对象引用设置为null 。 在Java中,是否将对象引用设置为null提高性能或垃圾收集效率? 如果是这样,这是一个什么情况? 容器类? 对象组成? 匿名内部类? 我经常在代码中看到这个。 这是现在已经过时的编程build议还是仍然有用?

JavaScriptvariables声明外部或内部循环?

在AS3中我相信你应该初始化循环外的所有variables以提高性能。 这是JavaScript的情况吗? 哪个更好/更快/最好的做法? var value = 0; for (var i = 0; i < 100; i++) { value = somearray[i]; } 要么 for (var i = 0 ; i < 100; i++) { var value = somearray[i]; }

在Python中查找数字的所有因素的最有效的方法是什么?

有人可以向我解释一个有效的方法来find在Python(2.7)中的一个数字的所有因素? 我可以创buildalgorithm来完成这项工作,但是我认为它编码不好,并且花费很长时间来执行大量的结果。

为什么require_once很糟糕?

我所读到的关于更好的PHP编码实践的一切都不停地说因为速度而不使用require_once 。 为什么是这样? 做与require_once相同的事情的正确/更好的方法是什么? 如果有关系,我使用PHP5。

在LINQ查询中调用ToList()或ToArray()会更好吗?

我经常遇到这样的情况,我想在我声明的位置上对查询进行评估。 这通常是因为我需要迭代多次,计算起来很昂贵。 例如: string raw = "…"; var lines = (from l in raw.Split('\n') let ll = l.Trim() where !string.IsNullOrEmpty(ll) select ll).ToList(); 这工作正常。 但是,如果我不打算修改结果,那么我不如调用ToArray()而不是ToList() 。 然而,我不知道是否ToArray()是通过首先调用ToList()来实现的,因此与调用ToList()相比内存效率更低。 我疯了吗? 我应该只是调用ToArray() – 安全和安全的知识,内存不会被分配两次?

algorithm给定数的除数

计算给定数字的除数的最佳algorithm(性能方面)是什么? 如果你能提供伪代码或者某个例子的链接,那将是非常好的。 编辑:所有的答案都非常有帮助,谢谢。 我正在实施Atkin的Sieve,然后我将使用与Jonathan Leffler所指出的类似的东西。 Justin Bozonier发布的链接提供了我想要的更多信息。

NTFS性能和大量的文件和目录

Windows与NTFS如何执行大量的文件和目录? 在遇到性能问题或其他问题之前,是否有任何关于文件或目录限制的指导,您可以将它们放在单个目录中? 例如,一个文件夹里面有100,000个文件夹是一件好事

就性能而言,使用std :: memcpy()或std :: copy()会更好吗?

如下所示使用memcpy更好吗,还是更好地使用性能std::copy() ? 为什么? char *bits = NULL; … bits = new (std::nothrow) char[((int *) copyMe->bits)[0]]; if (bits == NULL) { cout << "ERROR Not enough memory.\n"; exit(1); } memcpy (bits, copyMe->bits, ((int *) copyMe->bits)[0]);