创建比给定长度L更远的N个随机点(python和N = 200)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了创建比给定长度L更远的N个随机点(python和N = 200),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2880字,纯文字阅读大概需要5分钟。
内容图文
![创建比给定长度L更远的N个随机点(python和N = 200)](/upload/InfoBanner/zyjiaocheng/768/82906609db24452783ad61a0984a1407.jpg)
类似的问题:
Generating N random points with certain predefined distance between them
choose n most distant points in R
但是他们要么在matlab中,要么没有完成所需的任务.
我必须在一个长度的盒子里创建N个点
任意两点之间的距离大于delta.
例如:
假设我在x,y,z轴上有一个长度为10埃的盒子.
我想在这个盒子里面有200个随机点,以便最小距离
任意两点之间的距离大于3埃.
尝试:
#!python
# -*- coding: utf-8 -*-#
import numpy as np
np.random.seed(100)
np.set_printoptions(2)
box_length = 10
d = box_length
threshold = 6
num_points = 5
x1, y1, z1 = np.random.random(num_points)* box_length, np.random.random(num_points)* box_length, np.random.random(num_points)* box_length
x2, y2, z2 = np.random.random(num_points)* box_length, np.random.random(num_points)* box_length, np.random.random(num_points)* box_length
# print(len(x1))
# just for checking make ponts integers
for i in range(len(x1)):
x1[i] = int(x1[i])
x2[i] = int(x2[i])
y1[i] = int(y1[i])
y2[i] = int(y2[i])
z1[i] = int(z1[i])
z2[i] = int(z2[i])
print(x1)
print(y1)
print(z1)
print("\n")
pt1_lst = []
pt2_lst = []
for i in range(len(x1)):
a, b, c = x1[i], y1[i], z1[i]
a2, b2, c2 = x2[i], y2[i], z2[i]
dist2 = (a-a2)**2 + (b-b2)**2 + (c-c2)**2
print("\n")
print(a,b,c)
print(a2,b2,c2)
print(dist2)
if dist2 > threshold**2:
pt1 = (a,b,c)
pt2 = (a2,b2,c2)
pt1_lst.append(pt1)
pt2_lst.append(pt2)
print("points")
print(pt1_lst)
print(pt2_lst)
代码问题:
此代码比较了points1到points2的点,但是在points1和points2中没有比较.
可能有更好的算法来解决这个问题,并对这些问题表示赞赏
那些带着解决问题的绝妙主意的人.
谢谢.
PS:
我做了一些研究,并试图找到相关的链接,但无法解决
问题.
还有一些相关的链接是:
更新::
我尝试下面的Stefans代码,它适用于N = 10但是我尝试了N = 200并且它使用了非常大的时间(我在10分钟后停止了代码).
有没有有效的方法呢?
帮助将是真正的赞赏!
All paths of length L from node n using python
Create Random Points Inside Defined Rectangle with Python
解决方法:
Let’s say I have a box of length 10 Angstrom on x,y,z axis.
I want to have 10 random points inside this box so that minimum distance between any two points is larger than 3 Angstrom.
我认为这样可行,在该方框中重复产生十个随机点,直到距离足够大:
>>> import numpy as np
>>> from itertools import combinations
>>> while True:
P = np.random.rand(10, 3) * 10
if all(np.linalg.norm(p - q) > 3
for p, q in combinations(P, 2)):
break
>>> P
array([[ 9.02322366, 6.13576854, 3.1745708 ],
[ 6.48005836, 7.5280536 , 4.66442095],
[ 5.78306167, 1.83922896, 9.48337683],
[ 0.70507032, 0.20737532, 5.31191608],
[ 3.71977864, 6.40278939, 3.81742814],
[ 0.03938102, 6.7705456 , 6.28841217],
[ 3.27845597, 2.98811665, 4.81792286],
[ 7.74422021, 9.30027671, 8.1770998 ],
[ 0.28544716, 0.35155801, 9.77847352],
[ 4.84536373, 4.21378476, 0.4456017 ]])
需要大约50次尝试才能找到一组好点.在这里,我尝试1000次,20次很好:
>>> sum(all(np.linalg.norm(p - q) > 3
for p, q in combinations(np.random.rand(10, 3) * 10, 2))
for _ in range(1000))
20
内容总结
以上是互联网集市为您收集整理的创建比给定长度L更远的N个随机点(python和N = 200)全部内容,希望文章能够帮你解决创建比给定长度L更远的N个随机点(python和N = 200)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。