相关疑难解决方法(0)

为什么 Python 的 Numpy zeros 和空函数之间的速度差异对于更大的数组大小消失了?

我被一个感兴趣的博客文章由Mike槎他比较需要两个函数的时间numpy.zeros((N,N))numpy.empty((N,N))N=200N=1000。我使用%timeit魔法在 jupyter notebook 中运行了一个小循环。下面的图表给出的所需要的时间之比numpy.zeronumpy.empty。对于N=346,numpy.zero比 慢大约 125 倍numpy.empty。在N=361及以上,这两个功能所需的时间几乎相同。

后来,在 Twitter 上的讨论导致了这样的假设:要么numpy为小分配做一些特殊的事情以避免malloc调用,要么操作系统可能会主动将分配的内存页面清零。

造成这种差异的原因是什么N,而较大的所需时间几乎相等N

在此处输入图片说明

通过启动堆溢出编辑:我可以重现它(这就是为什么我来到这里的第1名),这里有一个情节np.zerosnp.empty独立。该比率看起来像 GertVdE 的原始图:

在此处输入图片说明

在 Python 3.9.0 64 位、NumPy 1.19.2、Windows 10 Pro 2004 64 位上完成,使用此脚本生成数据:

from timeit import repeat
import numpy as np

funcs = np.zeros, np.empty

number = 10
index = …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

11
推荐指数
2
解决办法
667
查看次数

为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

我有一个用于跟踪各种值的数组。数组的2500x1700大小,所以不是很大。在会话结束时,我需要将该数组中的所有值重置为零。我尝试创建一个新的零数组并将数组中的所有值替换为零,并且创建一个全新的数组要快得多。

\n

代码示例:

\n
for _ in sessions:\n    # Reset our array\n    tracking_array[:,:] = 0\n\n1.44 s \xc2\xb1 19.1 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n
Run Code Online (Sandbox Code Playgroud)\n

相对

\n
for _ in sessions:\n    # Reset our array\n    tracking_array = np.zeros(shape=(2500, 1700))\n\n7.26 ms \xc2\xb1 133 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n

与仅替换数组中的值相比,为什么创建全新的数组要快得多?

\n

python arrays performance numpy

5
推荐指数
1
解决办法
1089
查看次数

标签 统计

numpy ×2

performance ×2

python ×2

arrays ×1