2021-09-08

最远点采样(Farest Point Sampling)

import numpy as np
import matplotlib.pyplot as plt

class FarthestSample(object):
    def __init__(self):
        super(FarthestSample, self).__init__()
    
    def __cal_distances(self, p_0, points):
        return ((p_0 -  points) ** 2).sum(axis=1)
    
    def __call__(self, points, k):
        farthest_pts = np.zeros((k, points.shape[1]), dtype=np.float32)
        farthest_pts[0] = points[np.random.randint(len(points))]
        distances = self.__cal_distances(farthest_pts[0], points)
        for i in range(1, k):
            farthest_pts[i] = points[np.argmax(distances)]
            distances = np.minimum(distances, self.__cal_distances(farthest_pts[i], points))
        # 此处更新得到的距离,已选点集中所有点到各个点的最小距离(所谓最远,是离现有所有的已选点最远->这个距离如何定义)
        return farthest_pts

points = np.random.randn(100, 4) * 100
# plt.scatter(points[:,0], points[:, 1])
farthestsample = FarthestSample()
ds_points = farthestsample(points, 10)

print(ds_points.shape)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值