Paralel olarak öğelerin filtrelenmesini deniyorum. Her eleman için, bir hedef noktasına yeterince yakın olup olmadığını görmek için bir mesafe hesaplaması yapmam gerekiyor. Bunu yapmak için zaten veri yapılarının mevcut olduğunu boşver, sadece şu an için ilk denemeler yapıyorum. Her neyse, rastgele vektörler ürettiğim ve onları filtrelediğim bazı çok temel deneyleri çalıştırmak istedim. İşte kod çalıştırır ve ben beklediğiniz döndüren buClojure, hesaplamalarımı gerçekleştirdikten sonra neden takılıyor?
(defn pfilter [pred coll]
(map second
(filter first
(pmap (fn [item] [(pred item) item]) coll))))
(defn random-n-vector [n]
(take n (repeatedly rand)))
(defn distance [u v]
(Math/sqrt (reduce + (map #(Math/pow (- %1 %2) 2) u v))))
(defn -main [& args]
(let [[n-str vectors-str threshold-str] args
n (Integer/parseInt n-str)
vectors (Integer/parseInt vectors-str)
threshold (Double/parseDouble threshold-str)
random-vector (partial random-n-vector n)
u (random-vector)]
(time (println n vectors
(count
(pfilter
(fn [v] (< (distance u v) threshold))
(take vectors (repeatedly random-vector))))))))
tüm yapar benim uygulaması var, yani yakın olan parametre n (vektörlerin uzunluğu), vektörleri (vektörlerin sayısı) ve vektörlerin sayısını ise hedef vektöre eşikten daha fazla. Anlamadığım şey, programların sonlandırmadan önce neden bir dakika daha beklemesidir. İşte
hatayı genel de bekliyoruz daha vardır içinde henüzpfilter
aslında çalıştığını teyit etmediği sürece, paralel filtrelemek için nasıl
$ time lein run 10 100000 1.0 [null] 10 100000 12283 [null] "Elapsed time: 3300.856 msecs" real 1m6.336s user 0m7.204s sys 0m1.495s
Herhangi bir yorum gösteren bir çalışma çıkışıdır.
Ah tamam, teşekkürler. Basit mesafe sorguları için kullanamayacağım ama daha kolay bir örnek oldu. Teşekkürler. – Thomas