返回介绍

Numba

发布于 2025-02-25 23:44:02 字数 1777 浏览 0 评论 0 收藏 0

@jit(nopython=True)
def numba_euclidean(vs, i, j):
    n = vs.shape[1]
    d = 0.0
    for k in range(n):
        t = vs[i, k] - vs[j, k]
        d += t*t
    return np.sqrt(d)

@jit
def numba_pairwise(vs, dist):
    n = vs.shape[0]
    ds = np.empty((n, n))
    for i in range(n):
        for j in range(n):
            if i == j:
                ds[i, j] = 0
            elif i > j:
                ds[i, j] = ds[j, i]
            else:
                ds[i, j] = dist(vs, i, j)
    return ds
%timeit -n 100 py_euclidean(vs, 0, 1)
%timeit -n 100 numba_euclidean(vs, 0, 1)
100 loops, best of 3: 111 µs per loop
100 loops, best of 3: 1.12 µs per loop
%timeit -n 10 py_pairwise(vs, py_euclidean)
%timeit -n 10 numba_pairwise(vs, numba_euclidean)
10 loops, best of 3: 537 ms per loop
10 loops, best of 3: 6.44 ms per loop
prof = %prun -r -q numba_pairwise(vs, numba_euclidean)
prof.sort_stats('time').print_stats(10);
      28 function calls in 0.014 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.014    0.014    0.014    0.014 <string>:1(<module>)
     2    0.000    0.000    0.000    0.000 numpy_support.py:131(map_arrayscalar_type)
     2    0.000    0.000    0.000    0.000 numpy_support.py:80(from_dtype)
     2    0.000    0.000    0.000    0.000 context.py:130(resolve_data_type)
    16    0.000    0.000    0.000    0.000 {isinstance}
     2    0.000    0.000    0.000    0.000 dispatcher.py:178(typeof_pyval)
     2    0.000    0.000    0.000    0.000 numpy_support.py:144(is_array)
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文