同様の質問を作成:
Generating N random points with certain predefined distance between themは、与えられた長さL(PythonとN = 200)よりも、すべてのより遠くのNのランダムな点
choose n most distant points in R
をしかし、彼らはMATLABで、または必要なタスクを気力ないかです。
任意の2点間の距離がデルタより大きい長さのボックス内にN個の点を作成する必要があります。
例: x、y、z軸に長さ10オングストロームのボックスがあるとします。
このボックスの内側に200個のランダムな点があるので、任意の2点の間の最小距離 が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)
コード上の問題: このコードはpoints2にポイントからポイントを比較したがポイントと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
KDtreeを使用して解決できませんでした。より多くの点については、 'scipy.spatial.distance.pdist'と' scipy.spatial.distance.squareform'を使って計算を高速化することができます。 – Joe
@ジョーええ、より大きい数字の方が良いかもしれません。彼らはすべての距離または最小距離を計算しますが、そうですか?最初も同じことをやっていましたが、小さすぎる距離のペアを見つけると直ちに停止して再試行するほうがはるかに速いことに気付きました。これは、この自作ブルートフォースチェックの利点です。 –
@StefanPochmann、これはN = 10でとても良いですが、N = 200でこのアルゴリズムを実行しようとすると時間がかかりすぎるかもしれません!!! – astro123