小编kor*_*dar的帖子

为什么 np.zeros() 比使用 Python 在 Numba 中重新初始化现有数组更快?

为什么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)

python numpy calloc dynamic-memory-allocation numba

5
推荐指数
1
解决办法
197
查看次数

标签 统计

calloc ×1

dynamic-memory-allocation ×1

numba ×1

numpy ×1

python ×1