如果您选择以下三种方法之一来初始化一个零的数组,您可以选择哪一种为什么?
my_arr_1 = np.full(size, 0)
或
my_arr_2 = np.zeros(size)
或
my_arr_3 = np.empty(size)
my_arr_3[:] = 0
答案 0 :(得分:10)
我使用np.zeros
,因为它的名字。我永远不会使用第三个成语,因为
它需要两个语句而不是一个表达式
NumPy人员更难以优化。事实上,在NumPy
1.10,np.zeros
仍然是最快的选择,尽管所有优化都要编制索引:
>>> %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 Zwinck的结果进行比较的更大数组:
>>> %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
答案 1 :(得分:6)
绝对是np.zeros
。它不仅是最惯用和最常见的方式,它也是迄今为止最快的:
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
答案 2 :(得分:1)
np.zeros
会快得多。如果只是想初始化一个给定形状和类型的数组,而不关心数组中的初始条目,则np.empty
会稍微快一些。
请参阅以下基本测试结果:
>>%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)
答案 3 :(得分:0)
np.zero():always 0
np.empty():Random number, depending on memory condition
您可以看到以下内容进行露营
np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
... [ 0., 0., 0., 0.],
... [ 0., 0., 0., 0.]])
np.empty((3,4))
array([[1.13224202e+277, 1.73151846e-077, 1.24374310e-047,1.30455491e-076],
[3.92384790e+179, 6.01353875e-154, 3.12452337e-033,7.72229932e+140],
[1.28654694e-320, 0.00000000e+000, 0.00000000e+000,0.00000000e+000]])