2010-09-02 30 views
7

Ben bir piton benzetimin bir parçası olarak bir 2d dizi almak ve bu dizinin derecesi sunar. Bu, 2d dizisini uygun ağırlığa sahip bir filtre ile çevirerek scipy/numpy'de yapılır.Bir resmi clojure'da işlemenin en iyi yolu nedir?

Bu yüzden sorum şu: eğer clojure içinde bunu yapmak isterim ki, hızlı bir şekilde bunu yapmak, saf bir clojure yapmak için mantıklı mıdır, yoksa bir Java görüntü işleme kütüphanesi kullanmak ve clojure'dan çağırmak daha mı iyidir?

cevap

5

Clojure bir iyi optimize döngü Java koduna performans yakın olacaktır.

çok iyi performans elde etmek için ilkel vektörler veya doğrudan Clojure gelen diziler kullanılarak bildirecektir.

Ben konuyla ilgili bir blog yayınını okudum: http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html

iyi süreç açıktır kodu ve eserleri ile başlar ve daha sonra performansı için de tweek etmektir.

Genellikle Clojure performans etrafında yansıma ve ilkellerini kullanarak kurtulmak etrafında döner. Bu burada açıklanmıştır: http://clojure.org/java_interop

1

Sen Clojure Java görüntü işleme kütüphaneleri kullanabilirsiniz. İşte başlamak için bir şey. Bu derleme eğer bilmiyorum

(defn getPixels [^BufferedImage image] (-> image .getRaster .getDataBuffer .getData)) 

(Ben bazı yardım) Sadece kafamda benim bazı Scala koddan çevrilmiş.

http://clojure.org/java_interop

+0

Teşekkürler ama saf Clojure yazma vs Java kütüphaneleri kullanılarak performans farklılıklarını anlamak gerçekten ilgileniyorum. – 2daaa

1

gerçekten iyi performansı istiyorsanız , muhtemelen (Anladığım kadarıyla, NumPy yaptığı iştir,) yerel kodda sizin hesaplamaları yapmak için ihtiyacımız olacak. Önceki bir projede JAI kullandık ve iyi çalıştı, ancak gelişmiş bir şey için kullanmıyorduk. kernels ve convolutions desteği var gibi görünüyor, bu nedenle amaçlar için işe yarayabilecek. Ancak, bunun NumPy kadar esnek olduğuna inanmıyorum.

İlgili konular