سؤال

هي أجزاء من NumPy و/أو SciPy المبرمجة في C/C++?

وكيف النفقات العامة من الدعوة ج من بيثون مقارنة النفقات العامة من الدعوة ج من جافا أو C# ؟

أنا أتساءل فقط إذا كان الثعبان هو خيار أفضل من جافا أو C# على تطبيقات علمية.

إذا نظرت اطلاق النار, ، بيثون يخسر بفارق كبير.ولكن أعتقد أن هذا هو لأنها لا تستخدم 3rd الطرف المكتبات في تلك المعايير.

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

المحلول

  1. أود السؤال أي المعيار الذي لا يظهر مصدر لكل التنفيذ (أو فاتني شيء)?فمن الممكن تماما أن أي أو كل من هذه الحلول هي مشفرة بشدة مما سيؤدي إلى غير عادلة تقييم أو كليهما اللغة الأداء. [عدل] عفوا, أنا الآن انظر المصدر.كما أشار آخرون على الرغم من انها لا تستخدم NumPy/SciPy المكتبات حتى تلك المعايير لن تساعدك على اتخاذ قرار.
  2. وأعتقد أن الغالبية العظمى من NumPy و SciPy هو مكتوب في C و ملفوفة في بيثون لسهولة الاستخدام.
  3. فإنه ربما يعتمد على ما تفعله في أي من هذه اللغات مقدار النفقات العامة هناك تطبيق معين.

لقد استعملت الثعبان على معالجة البيانات وتحليلها لبضع سنوات حتى الآن وأود أن أقول بالتأكيد يصلح لهذا الغرض.

ما الذي تحاول تحقيقه في نهاية اليوم ؟ إذا كنت تريد طريقة سريعة لوضع رمز للقراءة ، بيثون هو خيار ممتاز و بالتأكيد سريع بما فيه الكفاية لأول طعنة في كل ما هو كنت تحاول حل.

لماذا لا يكون باش في كل مجموعة فرعية صغيرة من مشكلتك وقياس النتائج في مجال التنمية وقت تشغيل الوقت ؟ ثم يمكنك اتخاذ قرار موضوعي استنادا إلى بعض البيانات ذات الصلة أو على الأقل هذا ما أود أن تفعل :-)

نصائح أخرى

الكثير من هو مكتوب في C أو fortran.يمكنك إعادة كتابة الحلقات الساخنة في ج (أو استخدام واحد من الملايين طرق سرعة الثعبان ، دفعة/نسج هو المفضل لدي) ، ولكن هل هذا يهم حقا ؟

العلمية الخاصة بك التطبيق سيتم تشغيل مرة واحدة.والباقي هو مجرد تصحيح و التنمية و تلك التي يمكن أن تكون أسرع بكثير في بيثون.

معظم NumPy في C ، ولكن جزء كبير من التعليمات البرمجية C هو "النمطي" للتعامل مع كل التفاصيل القذرة من بيثون/ج واجهة.أعتقد نسبة مئوية مقابلالثعبان حول 50/50 الصراف الآلي على NumPy.

أنا لم تكن مألوفة جدا مع vm القائم على مستوى منخفض من التفاصيل, ولكن أعتقد واجهة التكلفة ستكون أعلى بسبب القيود التي وضعت على jvm،.clr.واحدة من السبب numpy هو في كثير من الأحيان أسرع من بيئات مماثلة هي ذاكرة التمثيل وكيف المصفوفات مشتركة/مرت من بين الوظائف.في حين أن معظم البيئات (Matlab و R كما أعتقد) استخدام النسخ عند الكتابة إلى تمرير صفائف بين الوظائف ، NumPy استخدام المراجع.ولكن القيام بذلك في مثلJVM سيكون من الصعب (بسبب القيود المفروضة على كيفية استخدام المؤشر ، الخ...).فمن قابلة للتنفيذ (مبكرة ميناء NumPy على Jython موجود) ولكن لا أعرف كيفية حل هذه المشكلة.ربما C++/Cli من شأنه أن يجعل هذا أسهل, ولكن ليس لدي أي خبرة مع تلك البيئة.

هناك أفضل مقارنة هنا (ليس معيارا ولكن يظهر طرق تسريع بيثون).NumPy في الغالب مكتوبة في C.والميزة الرئيسية الثعبان هو أن هناك عددا من الطرق جدا بسهولة توسيع نطاق الخاص بك مع رمز C (ctypes, تشرب,f2py) / C++ (دفعة.بيثون ، نسج.مضمنة ، نسج.الغارة) / Fortran (f2py) - أو حتى فقط عن طريق إضافة نوع شروح الثعبان بحيث يمكن معالجة ج (cython).أنا لا أعتقد أن هناك العديد من الأشياء سهلة نسبيا على C# أو جافا - على الأقل حتى بشكل مستمر التعامل مع تمرير المصفوفات العددية من أنواع مختلفة (على الرغم من أنني أعتقد أنصار أزعم منذ ليس لديهم أداء عقوبة من بيثون هناك حاجة أقل).

دائما يعتمد على الخاص بك القدرة على التعامل مع اللغة ، وبالتالي فإن اللغة هي قادرة على توليد رمز سريع.من تجربتي ، numpy عدة مرات أبطأ ثم جيدة .صافي تطبيقات.و أتوقع جافا أن تكون مماثلة سريع.بهم تحسين JIT المجمعين قد تحسنت بشكل ملحوظ على مر السنين و إنتاج فعالة جدا التعليمات.

numpy من ناحية أخرى يأتي مع الجملة اللي تبونه هو أسهل لاستخدام تلك التي هي منسجمة مع لغات البرمجة.ولكن إذا كان يأتي إلى تطوير تطبيق تلك المزايا في كثير من الأحيان تتحول إلى العقبات وسوف يتوقون typesafety والمشاريع ايديس.كما النحوية الفجوة تضيق بالفعل مع C#.عدد متزايد من المكتبات العلمية موجودة جافا و .صافي.شخصيا أميل نحو C#, لان ذلك يوفر أفضل جملة المصفوفات متعددة الأبعاد و أشعر أكثر 'الحديثة'.ولكن بالطبع هذه ليست سوى تجربتي الشخصية.

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