首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Np.full(大小,0)与np.zeros(大小)与np.empty()

Np.full(大小,0)与np.zeros(大小)与np.empty()
EN

Stack Overflow用户
提问于 2014-10-06 09:18:16
回答 5查看 18.4K关注 0票数 32

如果您要选择以下三种方法中的一种,使用零初始化数组,那么您会选择哪一种,以及为什么选择

代码语言:javascript
复制
my_arr_1 = np.full(size, 0) 

代码语言:javascript
复制
my_arr_2 = np.zeros(size)

代码语言:javascript
复制
my_arr_3 = np.empty(size)
my_arr_3[:] = 0
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-10-06 09:27:11

我会使用np.zeros,因为它的名字。我不会用第三个成语,因为

  1. 它需要两个语句,而不是一个表达式,并且
  2. NumPy人员很难对其进行优化。实际上,在NumPy 1.10中,尽管对索引进行了所有优化,但np.zeros仍然是最快的选项:

代码语言:javascript
复制
>>> %timeit np.zeros(1e6)
1000 loops, best of 3: 804 µs per loop
>>> %timeit np.full(1e6, 0)
1000 loops, best of 3: 816 µs per loop
>>> %timeit a = np.empty(1e6); a[:] = 0
1000 loops, best of 3: 919 µs per loop

与@John的结果比较的更大的数组:

代码语言:javascript
复制
>>> %timeit np.zeros(1e8)
100000 loops, best of 3: 9.66 µs per loop
>>> %timeit np.full(1e8, 0)
1 loops, best of 3: 614 ms per loop
>>> %timeit a = np.empty(1e8); a[:] = 0
1 loops, best of 3: 229 ms per loop
票数 21
EN

Stack Overflow用户

发布于 2014-10-06 09:26:23

绝对是np.zeros。这样做不仅是最惯用和最常见的方式,而且也是迄今为止最快的:

代码语言:javascript
复制
In [1]: size=100000000

In [3]: %timeit np.full(size, 0)
1 loops, best of 3: 344 ms per loop

In [4]: %timeit np.zeros(size)
100000 loops, best of 3: 8.75 µs per loop

In [5]: %timeit a = np.empty(size); a[:] = 0
1 loops, best of 3: 322 ms per loop
票数 8
EN

Stack Overflow用户

发布于 2018-09-06 10:43:52

如果要将数组初始化为零,np.zeros要快得多。如果只想初始化一个给定形状和类型的数组,而不关心数组中的初始条目,那么np.empty会稍微快一些。

请参见以下基本测试结果:

代码语言:javascript
复制
>>%timeit np.zeros(1000000)
7.89 µs ± 282 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

>>%timeit np.empty(1000000)
7.84 µs ± 332 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26213199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档