小编jer*_*111的帖子

numpy 怎么这么快?

numpy基于我与优化的 C/C++ 代码的令人震惊的比较,我试图了解怎么能这么快,这仍然远不能重现 numpy 的速度。

考虑以下示例:给定一个带有shape=(N, N)和的二维数组dtype=float32,它表示 N 维的 N 个向量的列表,我正在计算每对向量之间的成对差异。使用numpy广播,这简单地写为:

def pairwise_sub_numpy( X ):
    return X - X[:, None, :]
Run Code Online (Sandbox Code Playgroud)

使用timeit我可以测量性能N=512:在我的笔记本电脑上每次通话需要 88 毫秒。

现在,在 C/C++ 中,一个简单的实现写为:

#define X(i, j)     _X[(i)*N + (j)]
#define res(i, j, k)  _res[((i)*N + (j))*N + (k)]

float* pairwise_sub_naive( const float* _X, int N ) 
{
    float* _res = (float*) aligned_alloc( 32, N*N*N*sizeof(float));

    for (int i = 0; i < N; i++) {
        for …
Run Code Online (Sandbox Code Playgroud)

c c++ arrays performance numpy

61
推荐指数
2
解决办法
1827
查看次数

标签 统计

arrays ×1

c ×1

c++ ×1

numpy ×1

performance ×1