为什么numpy.zeros()比重新初始化现有数组更快?
我从事计算机建模工作,并在工作中使用 numba。有时需要有一个归零数组来累积某些操作的结果。一般来说,我认为对已分配的数组进行清零不会比创建一个充满零的新数组慢,但事实并非如此。我知道延迟选择(例如为什么Python的Numpy零和空函数之间的速度差异会随着较大的数组大小而消失?https: //vorpus.org/blog/why-does-calloc-exist/),但它必须采取是时候将其归零了。
据我所知,np.zeros使用calloc和所有加速都来自此调用,并且应该可以为其他语言重现。有什么保证吗,总是这样吗?这是好的做法还是不好的做法?
import numpy as np
import numba as nb
import benchit
nb.set_num_threads(1)
@nb.njit
def numba_operation(in_arr, out):
for i in range(out.shape[0]):
for j in range(out.shape[1]):
out[i,j] += in_arr[i,j] * 2 + 4
@nb.njit
def numba_operation_with_zeros(in_arr, out):
for i in range(out.shape[0]):
for j in range(out.shape[1]):
out[i,j] = 0
for i in range(out.shape[0]):
for j in range(out.shape[1]):
out[i,j] += in_arr[i,j] * 2 + 4
def every_time_generate_zeros(data):
in_arr, out = data
out …Run Code Online (Sandbox Code Playgroud)