如果您要选择以下三种初始化零的数组中的一种,您可以选择其中一种,并且为什么?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