7

Python シミュレーションの一部として、2 次元配列を取得し、この配列の勾配を取得します。これは、適切な重みを持つフィルターで 2 次元配列を畳み込むことにより、scipy/numpy で行われます。

したがって、私の質問は、これを clojure で合理的に高速に実行したい場合、純粋な clojure でこれを実行することは理にかなっていますか、それとも Java 画像処理ライブラリを使用して clojure から呼び出す方がよいでしょうか?

4

3 に答える 3

5

Clojure で適切に最適化されたループは、Java コードに近いパフォーマンスを発揮します。

非常に優れたパフォーマンスを得るには、プリミティブ ベクトルまたは clojure の直接配列のいずれかを使用することをお勧めします。

このテーマに関するブログ投稿を読みました: http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html

適切なプロセスは、明確で機能するコードから始めて、後でパフォーマンスを調整することです。

多くの場合、Clojure でのパフォーマンスは、リフレクションを取り除き、プリミティブを使用することに関係しています。これはここで説明されています: http://clojure.org/java_interop

于 2010-09-03T12:37:01.817 に答える
1

本当に最適なパフォーマンスが必要な場合は、おそらくネイティブ コードで計算を行う必要があります (これは、NumPy が行うことだと理解しています)。以前のプロジェクトでJAIを使用し、うまく機能しましたが、高度な目的には使用していませんでした。kernelsconvolutionsをサポートしているように見えるので、目的に合うかもしれません。ただし、NumPy ほど柔軟であるとは思えません。

于 2010-09-08T13:00:51.923 に答える
1

Clojure から Java 画像処理ライブラリを使用できます。ここから始めましょう。

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

これがコンパイルされるかどうかはわかりません(私が助けてくれます)頭の中で私のScalaコードから翻訳したところです。

http://clojure.org/java_interop

于 2010-09-02T18:57:41.973 に答える