python - 在 3D 空间中以最小最近邻距离和最大密度随机采样给定点
问题描述
我n
在 3D 空间中有点。我想随机采样所有最近邻距离大于的点的子集r
。子集的大小m
未知,但我希望采样点尽可能密集,即最大化m
。
有类似的问题,但它们都是关于生成点,而不是从给定点采样。
在 3D 空间中生成具有最小最近邻距离的随机点
假设我有 300 个随机 3D 点,
import numpy as np
n = 300
points = np.random.uniform(0, 10, size=(n, 3))
在最大化时获得m
最近邻距离最小的点子集的最快方法是什么?r = 1
m
解决方案
可能有一个有效的双准则近似方案,但是当整数规划平均速度如此之快时,为什么还要麻烦呢?
import numpy as np
n = 300
points = np.random.uniform(0, 10, size=(n, 3))
from ortools.linear_solver import pywraplp
solver = pywraplp.Solver.CreateSolver("SCIP")
variables = [solver.BoolVar("x[{}]".format(i)) for i in range(n)]
solver.Maximize(sum(variables))
for j, q in enumerate(points):
for i, p in enumerate(points[:j]):
if np.linalg.norm(p - q) <= 1:
solver.Add(variables[i] + variables[j] <= 1)
solver.EnableOutput()
solver.Solve()
print(len([i for (i, variable) in enumerate(variables) if variable.SolutionValue()]))
推荐阅读
- arrays - 如何更改数组中特定元素的值?
- python - Scrapy:response.xpath 打印无,但在点击网络链接时,xPath 是正确的
- javascript - 为什么在 forEach 循环完成之前执行代码?
- flutter - 如何从小部件导航到另一个页面
- python - 如何使用 Seaborn 在条形图上显示每组的中值
- asciidoc - 如何让表格占据整个可用画布宽度?
- python - 维基命令 discord.py
- python - 错误:命令出错,退出状态为 1:升级到 Python 3.9.2 后
- javascript - 更改视口宽度/高度时调整画布大小而无需刷新
- javascript - 为什么名称变量在 VS Code 上显示为带有删除线?