Friday, 19 January 2018

بى - رمز الأسي الحركة من المتوسط


تراديريما وظيفة تراديريما () لا يعمل بشكل صحيح. فإنه يحسب فقط متوسط ​​إدخالات الفترة الماضية. اتبع التعليمات البرمجية التالية ل تراديريما: الدالة إماكالكولاتور (حد، صفيف) إيمابريفوسداي array0 برينتر (صفيف) مضاعف 1 (2limit1) إيماراي () إما صفيف 0 إغلاق array1 بينما (الحد) إكيما هو إيما إما (كلوز - إمابريفوسداي) مضاعف 1 إمابريفيوسداي إمابريفيوسداي إما LIM - - إيما العائد حيث يقيد الحد فترة إيما والمصفوفة. قبول مجموعة من البيانات لحساب إما. أريد حساب المتوسط ​​المتحرك (أسي) المتوسط ​​في فب. حاولت إيف مع التعليمات البرمجية التالية ولكن لها تعطيني 500 خطأ. فب: إما حساب وظيفة التاجر إما حاولت مع وقت طويل غوغلينغ ولكن لا تحصل على أي مساعدة على هذا في فب. لذلك، إيف أي فكرة ما يجب القيام به لحساب قيمة إما. إديت-1: الإضافات المثبتة إيف تثبيت جميع الإضافات اللازمة، الآن أنا الحصول على الإخراج. ولكن لا يبدو إعطاء الناتج المناسب. أعتقد أن وظيفة فب لحساب إما لا تعمل بشكل صحيح. أي مساعدة في هذا سيكون موضع تقدير كبير. أنا محاولة لاسترداد إما الأخير من مجموعة كبيرة من البيانات (15000 القيم). بل هو خوارزمية جائع الموارد جدا لأن كل قيمة تعتمد على سابقتها. هنا هو بلدي التعليمات البرمجية: ما فعلت بالفعل: عزل k لذلك لا يتم حساب 10000 مرات إبقاء فقط أحدث إما المحسوبة، وعدم الاحتفاظ بها جميعا في مصفوفة استخدام ل () بدلا من فوريش () صفيف البيانات ليس لديها مفاتيح لها مجموعة أساسية هذا سمح لي إلى تقليل وقت التنفيذ من 2000ms إلى حوالي 500ms ل 15000 القيم ما لم يعمل: استخدام سبلفيسدراي ()، هذا حلق فقط 10ms تنفيذ 1،000،000 القيم استخدام تمديد فبترادر. وهذا يعيد مصفوفة تحتوي على جميع إماس بدلا من أحدث فقط، وبطء الكتابة وتشغيل نفس الخوارزمية في C وتشغيلها أكثر من 2،000،000 القيم يأخذ فقط 13ms ومن الواضح ذلك، وذلك باستخدام لغة المترجمة، وانخفاض مستوى يبدو أن يساعد P حيث يجب أن أذهب من هنا سيتم تشغيل التعليمات البرمجية في نهاية المطاف على أوبونتو، لذلك اللغة التي يجب أن أختار سوف فب تكون قادرة على استدعاء وتمرير مثل هذه الحجة الضخمة إلى السيناريو طلب يوليو 11 14 في 19:21 واضح تنفيذ مع تمديد يمنحك دفعة كبيرة. بالإضافة إلى ذلك يمكن تحسين حساب التفاضل والتكامل في حد ذاته وهذا المكسب يمكنك إضافة في أيهما اللغة التي تختارها. فمن السهل أن نرى أن لاستيما يمكن حسابها على النحو التالي: يمكن إعادة كتابة هذا على النحو التالي من أجل إخراج من حلقة بقدر الإمكان: لشرح استخراج k أعتقد أنه في الصيغة السابقة كما لو أن كل يتم ضرب البيانات الخام الأصلية في ك حتى عمليا يمكنك بدلا من ذلك مضاعفة النتيجة النهائية. لاحظ أن إعادة كتابة بهذه الطريقة، لديك 2 عمليات داخل حلقة بدلا من 3 (لتكون دقيقة داخل حلقة هناك أيضا زيادة، وأنا مقارنة مع سيزداتا وتعيين قيمة لاستيما) لذلك بهذه الطريقة يمكنك أن تتوقع تحقيق إضافية سبيدوب في النطاق ما بين 16 و 33. وعلاوة على ذلك هناك تحسينات أخرى يمكن اعتبارها على الأقل في بعض الظروف: النظر في القيم الأخيرة فقط يتم ضرب القيم الأولى عدة مرات بواسطة k1m 1 - k بحيث مساهمتها قد يكون قليلا أو حتى الذهاب تحت دقة النقطة العائمة (أو الخطأ المقبول). هذه الفكرة مفيدة بشكل خاص إذا كنت تستطيع أن تفعل افتراض أن البيانات القديمة هي من نفس الترتيب من حيث الحجم الأحدث لأنه إذا كنت تعتبر فقط قيم n الماضي الخطأ الذي تقوم به هو إيموفديسكارديداتا (1-k) n. حتى إذا كان ترتيب من الحجم هو نفسه على نطاق واسع يمكننا أن نقول أن الخطأ النسبي القيام به هو ريل إر لاستما إماوفسكارديداتا (1-ك) ن الماضي سيما أن يساوي تقريبا ببساطة (1-ك) ن. تحت افتراض أن لاستما يساوي تقريبا إيموفديسكارديداتا: دعونا نقول أنه يمكنك قبول ريلر خطأ نسبي يمكنك النظر بأمان فقط القيم ن الماضي حيث (1 - k) n لوت ريلر. يعني أنه يمكنك قبل حساب (قبل حلقة) ن سجل (ريلر) سجل (1-ك) وحساب جميع فقط النظر في القيم ن الماضي. إذا كانت مجموعة البيانات كبيرة جدا هذا يمكن أن تعطي سرعة معقولة. ضع في اعتبارك أنه بالنسبة لأرقام النقطة العائمة 64 بت لديك دقة نسبية (تتعلق بالعشرية) التي هي 2-53 (حوالي 1.1e-16 و 2-24 5.96e-8 فقط لأرقام نقطة عائمة 32 بت) بحيث لا يمكنك الحصول على أفضل من هذا الخطأ النسبي لذلك أساسا يجب أن لا يكون لديك ميزة في حساب أكثر من n سجل (1.1e-16) سجل (1-k) القيم. على سبيل المثال إذا كان نطاق 2000 ثم ن سجل (1.1e-16) سجل (1-22001) 36746. وأعتقد أن من المثير للاهتمام أن نعرف أن الحسابات الإضافية سوف تضيع داخل جولة هو عديم الفائدة هو أفضل عدم القيام به. الآن مثال واحد للحالة حيث يمكنك قبول خطأ نسبي أكبر من العائمة نقطة الدقة ريل 1ppm 1e-6 0.00001 6 أرقام عشري كبير لديك ن سجل (1.1e-16) سجل (1-22001) 13815 أعتقد تماما عدد قليل مقارنة بأرقام العينات الأخيرة الخاصة بك حتى في تلك الحالات يمكن أن يكون سبيدوب واضحا (إم على افتراض أن مجموعة 2000 هو ذات مغزى أو عالية للتطبيق الخاص بك ولكن لا أستطيع أن أعرف). فقط عدد قليل من الأرقام الأخرى لأنني لا أعرف ما هي الأرقام النموذجية الخاصة بك: ريل 1e-3 مجموعة 2000 n 6907 ريلر 1e -3 مجموعة 200 n 691 ريلر 1e-3 مجموعة 20 n 69 ريلر 1e-6 مجموعة 2000 n 13815 ريلر 1e - 6 نطاق 200 n 1381 ريلر 1e-6 النطاق 20 n 138 إذا كان لا يمكن أن تؤخذ على افتراض لاستيما يساوي تقريبا إماوفديسكارديداتا الأمور أقل سهولة ولكن لأن ميزة كام تكون كبيرة يمكن أن يكون من المفيد أن تستمر: نحن بحاجة إلى إعادة النظر في الصيغة الكاملة: ريل إيموفديسكاردداتا (1-k) n لاستيما (n-لو) (n-لو) (ريلر لاستيما إماوفسكاردداتا) سجل (1-k) (لوغ (ريلر لوغ (لاستيما إماوفسكاردداتا)) سجل (1-k) إيموفديسكارديداتا (دون حساب في نهاية المطاف لاستيما ولا إماوفسكارديداتا بطبيعة الحال) حالة واحدة هي عندما نعلم مسبقا أن على سبيل المثال إماوفديسكاردداتا لاستيما لوت M (على سبيل المثال M 1000 أو M 1E6) في هذه الحالة n لوت (لوغ (ريلرم)) لوغ (1) - k) إذا كنت لا يمكن أن تعطي أي عدد M لديك للعثور على معرف جيد إي إلى الإفراط في تقدير إماوفديسكارديداتا لاستيما طريقة سريعة واحدة يمكن أن تأخذ M ماكس (البيانات) دقيقة (البيانات) موازية يمكن إعادة كتابة الحساب في شكل حيث هو إضافة بسيطة لشروط مستقلة: حتى إذا كانت لغة التنفيذ يدعم بالتوازي يمكن تقسيم مجموعة البيانات في 4 (أو 8 أو n. في الأساس عدد النوى وحدة المعالجة المركزية المتاحة) قطع ويمكن حساب مجموع المصطلحات على كل قطعة في موازاة تلخيص النتائج الفردية في نهاية المطاف. أنا لا أذهب بالتفصيل مع هذا لأن هذا الرد هو بالفعل طويلة بشكل رهيب، وأعتقد أن هذا المفهوم قد أعرب بالفعل. أشكركم على هذا I39m باستخدام هذا على بيانات سوق الأوراق المالية، وبالتالي فإن حقيقة أن البيانات القديمة هي على نفس الترتيب من حيث البيانات الجديدة تعتمد على الإطار الزمني المستخدم. لنفترض أن مجموعة من 200، سيكون هناك اختلاف أكبر بكثير في الأسعار على الإطار الزمني اليومي (200 يوما) من 5 دقائق الإطار الزمني (16 ساعة). سأختبر سيناريوهات مختلفة على البيانات الحقيقية والمحاكاة. على البيانات الجديدة، مع مجموعة لوت 200، يمكنني استخدام 1000 مجموعة البيانات. ولكن أيضا القيام ببعض اختبار الظهر على مدى السنوات القليلة الماضية، لذلك ما زلت بحاجة لتحميل مجموعة البيانات بأكملها. لقد ساعدت لكلا الحالتين، شكرا لك نداش ليكيجينس 16 يوليو 14 في 15:11 بناء ملحق الخاص بك بالتأكيد يحسن الأداء. هيريس تعليمي جيد من موقع زيند. بعض أرقام الأداء: الأجهزة: أوبونتو 14.04، فب 5.5.9، 1 النواة إنتل CPU3.3Ghz، 128MB من ذاكرة الوصول العشوائي (في فس). قبل (فب فقط، 16،000 القيم). 500ms c التمديد، 16،000 القيم. 0.3ms C التمديد (100،000 القيم). 3.7ms C التمديد (500،000 القيم). 28.0ms ولكن الذاكرة إم محدودة في هذه المرحلة، وذلك باستخدام 70MB. وسوف إصلاح ذلك وتحديث الأرقام وفقا لذلك.

No comments:

Post a Comment