N boyutlu noktalar koleksiyonuna sahibim ve en çok hangi 2'yi bulmak istiyorum. Ben 2 boyutları için gelebilir en iyisi:En küçük Euclidean mesafesi olan noktaları belirleme
from numpy import *
myArr = array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
n = myArr.shape[0]
cross = [[sum((myArr[i] - myArr[j]) ** 2), i, j]
for i in xrange(n)
for j in xrange(n)
if i != j
]
print min(cross)
[8, 0, 1]
veren Ama bu büyük diziler için çok yavaş. Ne tür bir optimizasyon uygulayabilirim?
İLGİLİ: Bir özyinelemeli ile size O elde edebilirsiniz (n log): http://en.wikipedia.org/wiki/Closest_pair_of_points
Yönetici özeti:
Euclidean distance between points in two different Numpy arrays, not within
yüksek boyutlar için iyi ölçeklendirme etmediği konusunda Not: Kabaca kaç puan var? Lütfen aynı mesafelere sahip 2 noktadan (hatta tüm puanlar) bir sete sahip olabileceğinizi unutmayın (ancak yanlış hesaplamalar bunu yansıtmayabilir, bu yüzden en sonunda trh'nin altındaki mesafe farklarının olduğu bir eşik trh ayarlayabilmeniz gerekir). eşit kabul edilir. Verilen birine en yakın noktayı bulmak ilginizi çekmiyor mu? – eat
@eat Bu, oluşturduğum bir hiyerarşi kümesi ve en yakın iki centriği bulmam gerekiyor. Normalde bin puandan az, ama ne kadar ölçekleyebileceğini görmem gerek. Yuvarlama hataları, benim durumumda o kadar önemli olmayacak. –