요소를 병렬로 필터링하는 실험을하고 있습니다. 각 요소에 대해 거리 계산을 수행하여 대상 점에 충분히 근접한 지 확인해야합니다. 이 작업을 수행하기 위해 데이터 구조가 이미 존재한다는 사실을 염두에 두지 마십시오. 지금은 초기 실험을하고 있습니다.계산을 수행 한 후 Clojure가 중단되는 이유는 무엇입니까?
어쨌든 임의의 벡터를 생성하고 필터링하는 아주 기본적인 실험을하고 싶었습니다. 다음 코드는 실행하고 나는 무엇을 기대 반환이
(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))))))))
을 모두 수행 내 구현이야, 그 가까이있는 매개 변수 N (벡터의 길이), 벡터 (벡터의 수)와 벡터의 수입니다 대상 벡터에 대한 임계 값보다 내가 이해할 수없는 것은 프로그램이 종료되기 전에 잠시 멈추는 이유이다. 여기
오류를 일반도 환영합니다 이상입니다 내가 아직pfilter
이 실제로 작동하는지 확인하지 않은로서, 병렬로 필터링하는 방법에 대한
$ 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
모든 의견을 보여줍니다 실행의 출력입니다.
아, 감사합니다. 나는 단순한 거리 질의를 위해 이것을 사용하지 않을 것이지만, 더 쉬운 예가 될 것이다. 감사. – Thomas