加快Numba距离计算

问题描述 投票:0回答:1

我最近一直在尝试如下计算到Python Numba中最接近的2个邻居的距离

@jit(nopython=True)
def _latent_dim_kernel(data, pointers, indices, nrange, sampling_percentage = 1):

    pdists_t2 = np.zeros((nrange, 2))
    for a in range(nrange):

        rct = 0
        for b in range(nrange):
            if np.random.random() > 1- sampling_percentage:
                if a == b:
                    continue

                r1 = _get_sparse_row(a, data, pointers, indices)
                r2 = _get_sparse_row(b, data, pointers, indices)

                dist = np.linalg.norm(r2 - r1)

                if rct > 1:
                    if pdists_t2[a,0] > dist:
                        pdists_t2[a,0] = dist

                    elif pdists_t2[a,1] > dist:
                        pdists_t2[a,1] = dist
                else:
                    pdists_t2[a,rct] = dist

                rct += 1

    return pdists_t2

数据,指针和索引是CSR矩阵(scipy)的x.data,x.indptr和x.indices。这很好,但是比[

慢得多
squareform(pdist(matrix)).sort(axis=1)[:,1:3]

如何在不增加内存开销的情况下进一步加快速度?

谢谢!

python numpy numba
1个回答
0
投票

支持稀疏矩阵的对数距离(不需要密集的临时数组)

© www.soinside.com 2019 - 2024. All rights reserved.