gpt4 book ai didi

python - np.empty 与 np.zeros 的速度

转载 作者:行者123 更新时间:2023-11-28 22:16:20 25 4
gpt4 key购买 nike

我使用的是 numpy 版本 1.14.3 和 python 2.7.12。

引用 this问题,我发现用 np.zeros 和 np.empty 初始化数组的速度有很大不同。但是,输出是相同的。

import numpy as np
r = np.random.random((50, 100, 100))
z = np.zeros(r.shape)
e = np.empty(r.shape)
np.allclose(e, z)

这将返回 True。然而,计时函数 %timeit 给出了截然不同的结果:

%timeit z = np.zeros(r.shape)

10000 loops, best of 3: 143 µs per loop

%timeit e = np.empty(r.shape)

1000000 loops, best of 3: 1.83 µs per loop

上面引用的先前接受的答案说 np.zeros 始终是更好的选择,而且速度也更快。

为什么不使用 np.empty,因为它比 np.zeros 快 80 倍并且返回相同的答案?

编辑正如 user2285236 指出的那样,翻转初始化 ze 的顺序将破坏相等性,因为它会覆盖同一内存区域。

最佳答案

np.emptynp.zeros 做不同的事情。

np.empty 从可用内存空间创建一个数组,将碰巧在内存中徘徊的任何值作为值保留。 这些值可能为零,也可能不为零。

np.zeros 从可用内存空间创建一个数组,然后用您选择的 dtype 的零填充它。显然 np.zeros 必须做更多的工作,所以它应该更慢,因为它也在写入分配的内存。

更公平的比较是 np.emptynp.ndarray

关于python - np.empty 与 np.zeros 的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com