最远点采样+分配点

import numpy as np

def farthest_point_sampling(points, num_samples):
    # 初始化最远点列表和已选择点列表
    farthest_points = []
    selected_points = []
    
    # 随机选择一个起始点
    idx = np.random.randint(len(points))
    farthest_points.append(points[idx])
    selected_points.append(idx)
    
    # 选择剩余点
    for _ in range(num_samples - 1):
        distances = np.linalg.norm(points - farthest_points[-1], axis=1)
        idx = np.argmax(distances)
        while idx in selected_points:
            distances[idx] = 0
            idx = np.argmax(distances)
        farthest_points.append(points[idx])
        selected_points.append(idx)
    
    return np.array(farthest_points)

def assign_points_to_nodes(points, nodes):
    assigned_nodes = [[] for _ in range(len(nodes))]
    
    for point in points:
        distances = np.linalg.norm(nodes - point, axis=1)
        closest_node_idx = np.argmin(distances)
        assigned_nodes[closest_node_idx].append(point)
    
    return assigned_nodes

# 示例用法
# 假设有一堆点
points = np.random.rand(100, 2)  # 生成100个随机点,每个点有两个坐标

# 最远点采样,选择10个点
sampled_points = farthest_point_sampling(points, 10)

# 假设有一些节点
nodes = np.random.rand(5, 2)  # 生成5个随机节点,每个节点有两个坐标

# 将每个点分配给最近的节点
assigned_nodes = assign_points_to_nodes(points, nodes)

print("采样得到的点:", sampled_points)
print("每个节点分配的点:", assigned_nodes)

    distances = torch.cdist(points, nodes)  # 计算点与节点之间的距离
    closest_nodes = torch.argmin(distances, dim=1)  # 找到每个点距离最近的节点索引
    assigned_nodes = [[] for _ in range(len(nodes))]

    # 将每个点分配给最近的节点
    for i, node_idx in enumerate(closest_nodes):
        assigned_nodes[node_idx.item()].append(points[i])
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值