python顺序结构之无输入求平抛小球与抛出点之间的距离_python – 在2D中找到点组之间的最小距离(快速且不太耗费内存)...

我在2D A和B中有两组点,我需要找到A中每个点的最小距离,到B中的一点.到目前为止,我一直在使用SciPy的

cdist,代码如下

import numpy as np

from scipy.spatial.distance import cdist

def ABdist(A,B):

# Distance to all points in B,for each point in A.

dist = cdist(A,B,'euclidean')

# Indexes to minimum distances.

min_dist_idx = np.argmin(dist,axis=1)

# Store only the minimum distances for each point in A,to a point in B.

min_dists = [dist[i][md_idx] for i,md_idx in enumerate(min_dist_idx)]

return min_dist_idx,min_dists

N = 10000

A = np.random.uniform(0.,5000.,(N,2))

B = np.random.uniform(0.,2))

min_dist_idx,min_dists = ABdist(A,B)

这适用于N的小值.但是现在这些集的长度从N = 10000增加到N = 35000并且我遇到了

dm = np.zeros((mA,mB),dtype=np.double)

MemoryError

我知道我可以用一个for循环替换cdist,它只保留A中每个点到B中每个点的最小距离(和索引),因为这就是我所需要的.我不需要完整的AxB距离矩阵.但我一直在使用cdist,因为它很快.

有没有办法用一个(差不多?)快的实现来替换cdist,但这不会占用那么多内存?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值