قد يكون هذا أقل من سؤال تنفيذ ، وأكثر من سؤال "فلسفة" ، لكن ألا ينبغي أن يعمل معيار Frobenius على المتجهات؟ المصدر: ولفرام
حاليًا ، لا يقبل Frobenius Norm في numpy النواقل:
import numpy as np
a = np.random.rand(10, 1)
b = np.squeeze(a)
print(np.linalg.norm(a, 'fro'))
print(np.linalg.norm(b, 'fro'))
مما يؤدي إلى:
1.7594677278427366
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
//anaconda3/lib/python3.7/site-packages/numpy/linalg/linalg.py in norm(x, ord, axis, keepdims)
2515 try:
-> 2516 ord + 1
2517 except TypeError:
TypeError: can only concatenate str (not "int") to str
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-18-2ace847024a5> in <module>
3 b = np.squeeze(a)
4 print(np.linalg.norm(a, 'fro'))
----> 5 print(np.linalg.norm(b, 'fro'))
<__array_function__ internals> in norm(*args, **kwargs)
//anaconda3/lib/python3.7/site-packages/numpy/linalg/linalg.py in norm(x, ord, axis, keepdims)
2516 ord + 1
2517 except TypeError:
-> 2518 raise ValueError("Invalid norm order for vectors.")
2519 absx = abs(x)
2520 absx **= ord
ValueError: Invalid norm order for vectors.
يبدو أن هذا خطأ في التعامل مع 'fro'
kwarg:
>>> print(np.linalg.norm(b))
1.7547099704258247
لاحظ أن معيار Frobenius هو الإعداد الافتراضي عندما يكون ord
kwarg هو None.
xref gh-14719 و gh-14215: فكرنا في إهمال الحالة العامة ، ولكن بعد ذلك لم نتقدم أبدًا لأنه على الرغم من عدم وجود مقاومة كبيرة ، كان هناك البعض. وبعض الحزم الأخرى تحددها على هذا النحو. لذا فإن القضية تكمن في تحديد المكان الذي نذهب إليه بالضبط هنا ...
كما أوضح لي روس ، فإن المشكلة / العلاقات العامة التي ربطتها مرتبطة ارتباطًا طفيفًا فقط ومن الواضح تمامًا أن هذا خطأ في معالجة "fro"
.
نرحب بعلاقات عامة لمعالجة الخطأ في معالجة kwarg (والاختبارات المصاحبة)! التقاط لطيف TNonet
نظرًا لأن هذه هي مشكلتي الأولى ، هل هناك أي موارد لإجراء الاختبارات المناسبة وطلب السحب؟
(أيضًا ، إذا كنت سأقوم باستنساخ Numpy repo وتشغيل setup.py ، فكيف يمكنني التأكد من الإصدار غير المفكك الذي أستخدمه عند استيراد numpy؟)
سأجادل إذا كان ord هو "fro" ، ثم الأسطر 2512-14 أدناه.
سوف تحتاج إلى التغيير إلى:
if ((ord is None) or
(ord in ('f', 'fro')) or
(ord == 2 and ndim == 1)):
بافتراض أن الجميع يوافقون على أن مصفوفة من الدرجة التاسعة لها قاعدة محظورة تلخص بشكل طبيعي مربعات كل عنصر.
المشكلة هي في الواقع أقل قليلاً في الكود - إذا اتبعت التتبع من الخطأ الذي تلقيته في الأصل ، فيجب أن تكون قادرًا على العثور على الشيء المخالف.
كما هو مذكور في المناقشات في # 14719 و # 14215 ، فإن السلوك الخاص بـ> بعدين هو مشكلة منفصلة - سيكون من الأفضل إذا كان بإمكانك قصر هذا العلاقات العامة على الخطأ في معالجة kwarg.
Re: موارد للاختبار / المساهمة: ألق نظرة على إرشادات مساهمة NumPy . يمكنك أيضًا إلقاء نظرة على اختبارات linalg في numpy/linalg/tests/test_linalg.py
للحصول على فكرة عن كيفية صياغة الاختبارات والمكان الذي قد تكون فيه الاختبارات الإضافية مناسبة. امل ان يساعد!
التعليق الأكثر فائدة
المشكلة هي في الواقع أقل قليلاً في الكود - إذا اتبعت التتبع من الخطأ الذي تلقيته في الأصل ، فيجب أن تكون قادرًا على العثور على الشيء المخالف.
كما هو مذكور في المناقشات في # 14719 و # 14215 ، فإن السلوك الخاص بـ> بعدين هو مشكلة منفصلة - سيكون من الأفضل إذا كان بإمكانك قصر هذا العلاقات العامة على الخطأ في معالجة kwarg.
Re: موارد للاختبار / المساهمة: ألق نظرة على إرشادات مساهمة NumPy . يمكنك أيضًا إلقاء نظرة على اختبارات linalg في
numpy/linalg/tests/test_linalg.py
للحصول على فكرة عن كيفية صياغة الاختبارات والمكان الذي قد تكون فيه الاختبارات الإضافية مناسبة. امل ان يساعد!