作为python模拟的一部分,我有一个二维数组并采用这个数组的渐变。这是通过将2d数组与具有适当权重的滤波器卷积而在scipy / numpy中完成的。
所以我的问题是,如果我想在clojure中快速地做到这一点,那么在纯粹的clojure中这样做是否有意义,或者使用Java图像处理库并从clojure调用它更好?
答案 0 :(得分:5)
Clojure中经过优化的循环将具有接近Java代码的性能。
我建议使用原始向量或直接使用clojure中的数组 获得非常好的表现。
我读过一篇关于这个主题的博文: http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html
良好的过程是从清晰的代码开始,然后工作和调整以获得性能。
通常,Clojure中的表现围绕着摆脱反射和使用原语。 这在这里解释: http://clojure.org/java_interop
答案 1 :(得分:1)
您可以使用Clojure中的Java图像处理库。这是开始的事情。
(defn getPixels [^BufferedImage image] (-> image .getRaster .getDataBuffer .getData))
我不知道这是否会编译(我有些帮助)我只是从我脑子里的一些Scala代码中翻译出来。
答案 2 :(得分:1)
如果你真的想要最佳性能,你可能需要在本机代码中进行计算(据我所知,这是NumPy所做的)。我们在之前的项目中使用了JAI,它运行良好,但我们并没有将它用于任何高级版本。它似乎支持kernels和convolutions,因此它可能适用于您的目的。但是,我不认为它像NumPy一样灵活。