parallel_distance_old.py 文件源码

python
阅读 41 收藏 0 点赞 0 评论 0

项目:icing 作者: slipguru 项目源码 文件源码
def dense_dm(input_array, dist_function, condensed=False):
    """Compute in a parallel way a distance matrix for a 1-d array.

    Parameters
    ----------
    input_array : array_like
        1-dimensional array for which to compute the distance matrix.
    dist_function : function
        Function to use for the distance computation.

    Returns
    -------
    dist_matrix : array_like
        Symmetric NxN distance matrix for each input_array element.
    """
    n = len(input_array)
    n_proc = min(mp.cpu_count(), n)
    index = mp.Value('i', 0)
    shared_array = np.frombuffer(mp.Array('d', n*n).get_obj()).reshape((n,n))
    # np.savetxt("shared_array", shared_array, fmt="%.2f", delimiter=',')
    ps = []
    lock = mp.Lock()
    try:
        for _ in range(n_proc):
            p = mp.Process(target=_dense_distance,
                        args=(lock, input_array, index, shared_array, dist_function))
            p.start()
            ps.append(p)

        for p in ps:
            p.join()
    except (KeyboardInterrupt, SystemExit): _terminate(ps,'Exit signal received\n')
    except Exception as e: _terminate(ps,'ERROR: %s\n' % e)
    except: _terminate(ps,'ERROR: Exiting with unknown exception\n')

    dist_matrix = shared_array + shared_array.T
    if condensed: dist_matrix = scipy.spatial.distance.squareform(dist_matrix)
    progressbar(n,n)
    return dist_matrix
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号