سؤال

كجزء من محاكاة بيثون ، أخذت صفيفًا ثنائي الأبعاد وأخذ التدرج في هذه الصفيف. يتم ذلك في Scipy/Numpy عن طريق ربط الصفيف ثنائي الأبعاد مع مرشح مع الأوزان المناسبة.

لذا فإن سؤالي هو ما إذا كنت أرغب في القيام بذلك في Clojure بسرعة معقولة ، فهل من المنطقي القيام بذلك في Clojure الخالص ، أم أنه من الأفضل استخدام مكتبة معالجة صور Java والاتصال بها من Clojure؟

هل كانت مفيدة؟

المحلول

ستحصل حلقة محسّنة جيدًا في Clojure على أداء بالقرب من كود Java.

سوف أنصح باستخدام المتجهات البدائية أو المصفوفات مباشرة من Clojure للحصول على أداء جيد للغاية.

لقد قرأت مدونة حول هذا الموضوع:http://www.bestinclass.dk/index.clj/2010/03/functional-fluid-dynamics-in-clojure.html

العملية الجيدة هي أن تبدأ بالرمز الواضح ويعمل و tweek في perfomance بعد ذلك.

في كثير من الأحيان ، يدور الأداء في clojure حول التخلص من التفكير واستخدام البدائية. هذا موضح هنا:http://clojure.org/java_interop

نصائح أخرى

يمكنك استخدام مكتبات معالجة صور Java من Clojure. هذا شيء للبدء.

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

لا أعرف ما إذا كان هذا سيجمع (بعض المساعدة أنا) لقد ترجمته للتو من بعض رمز Scala الخاص بي في رأسي.

http://clojure.org/java_interop

إذا كنت تريد حقًا الأداء الأمثل ، فربما تحتاج إلى إجراء حساباتك في الكود الأصلي (والتي ، كما أفهمها ، هي ما يفعله Numpy). كنا جاي في مشروع سابق ، وعمل بشكل جيد ، لكننا لم نستخدمه لأي شيء متقدم. يبدو أن لديها دعم ل نواة و الملاحقات, ، لذلك قد يعمل لأغراضك. ومع ذلك ، لا أعتقد أنه مرن مثل Numpy.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top