Если вам нужно было выбрать один из следующих трех способов инициализации массива с нулями, которые вы бы выбрали, и почему?
my_arr_1 = np.full(size, 0)
или
my_arr_2 = np.zeros(size)
или
my_arr_3 = np.empty(size)
my_arr_3[:] = 0
Если вам нужно было выбрать один из следующих трех способов инициализации массива с нулями, которые вы бы выбрали, и почему?
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
Большой массив для сравнения с результатами @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
Определенно 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
намного быстрее, если кто-то хочет инициализировать массив нулями. В случае, если кто-то просто хочет инициализировать массив заданной формы и типа, но не заботится о начальных записях в массиве, 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)
np.zero():always 0
np.empty():Random number, depending on memory condition
Вы можете увидеть следующее в campare
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]])