如果您要選擇以下三種初始化零的數組中的一種,您可以選擇其中一種,並且爲什麼?np.full(size,0)與np.zeros(size)與np.empty()
my_arr_1 = np.full(size, 0)
或
my_arr_2 = np.zeros(size)
或
my_arr_3 = np.empty(size)
my_arr_3[:] = 0
如果您要選擇以下三種初始化零的數組中的一種,您可以選擇其中一種,並且爲什麼?np.full(size,0)與np.zeros(size)與np.empty()
my_arr_1 = np.full(size, 0)
或
my_arr_2 = np.zeros(size)
或
my_arr_3 = np.empty(size)
my_arr_3[:] = 0
我會用np.zeros
,因爲它的名字。我永遠不會使用第三個成語,因爲(1)它需要兩個語句而不是單個表達式,(2)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
更大的陣列與@約翰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
絕對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
這正是'NP .zeros'是爲。爲什麼*不會使用它? – 2014-10-06 12:34:12
我正在使用它。但是,我不確定哪種方法在時間和內存使用方面效率最高! – Dataman 2014-10-06 12:50:32