Üç boyutta N
puanlık bir koleksiyona sahibim. Bunlar, (N,3)
biçiminde np.array
olarak depolanır. Tüm noktalar, iki nokta arasındaki minimum mesafe ~1e-5
olarak farklıdır. np.array
'daki mevcut siparişlerinden bağımsız olan ve tek tek bileşenlerin küçük pertürbasyonlarına karşı dayanıklı olan bu noktalar üzerinden yineleme yapılacak bir sipariş alma aracı arıyorum. bu olayda görebiliriz neredeNumPy: bulanık/toleranslı karşılaştırmalar ile np.lexsort
In [6]: my_array = np.array([[-0.5, 0, 2**0.5], [0.5, 0, 2**0.5 - 1e-15]])
In [7]: my_array[np.lexsort(my_array.T)]
Out[7]:
array([[ 0.5 , 0. , 1.41421356],
[-0.5 , 0. , 1.41421356]])
sipariş son derece geçerli:
ilk gereksinimi karşılayacak en basit araçları
np.lexsort(my_array.T)
ancak bu sağlamlık bölümünde başarısız olan np.lexsort
ile pertürbasyonlara duyarlı. Bu nedenle np.lexsort
no'lu bulanık bir varyant arıyoruz, eğer bir eksende iki değer epsilon
toleransının içinde ise bir sonraki eksene hareket edecektir. (Ya da sipariş vermeme izin verecek herhangi bir alternatif mekanizma.)
Uygulamamın hepsinin sipariş vermesi gereken birkaç milyonu bu koleksiyonlara sahip olduğundan, performans endişe verici bir şeydir (bu yüzden körü körüne denemedim) kendi hoşgörülü np.lexsort'umu ilk önce yapmanın daha iyi bir yolu olup olmadığını görmeden döndürmek için).
Karmaşık sayıları ilk önce gerçek parçaya göre ve sonra da hayali parçalara ayırmak için aynı şeylere ihtiyacım var, ancak gerçek parça sıralama bazı tolerans içinde olduklarında eşit sayılmalıdır. Herhangi bir çözüm bulabildin mi? Daha önce yapmakta olduğum şey, önce yaklaşık olarak sıralanmış olanları almak için lexsort kullanıyordu ve sonra yanlış sırada olan değerleri gruplandırmak için daha az optimal bir kabarcık sıralama algoritmasıyla yinelemekteydi. – endolith