Numpy: تعريف Frobenius نورم للناقلات؟

تم إنشاؤها على ٦ فبراير ٢٠٢٠  ·  6تعليقات  ·  مصدر: numpy/numpy

قد يكون هذا أقل من سؤال تنفيذ ، وأكثر من سؤال "فلسفة" ، لكن ألا ينبغي أن يعمل معيار 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.
00 - Bug numpy.linalg good first issue

التعليق الأكثر فائدة

المشكلة هي في الواقع أقل قليلاً في الكود - إذا اتبعت التتبع من الخطأ الذي تلقيته في الأصل ، فيجب أن تكون قادرًا على العثور على الشيء المخالف.

كما هو مذكور في المناقشات في # 14719 و # 14215 ، فإن السلوك الخاص بـ> بعدين هو مشكلة منفصلة - سيكون من الأفضل إذا كان بإمكانك قصر هذا العلاقات العامة على الخطأ في معالجة kwarg.

Re: موارد للاختبار / المساهمة: ألق نظرة على إرشادات مساهمة NumPy . يمكنك أيضًا إلقاء نظرة على اختبارات linalg في numpy/linalg/tests/test_linalg.py للحصول على فكرة عن كيفية صياغة الاختبارات والمكان الذي قد تكون فيه الاختبارات الإضافية مناسبة. امل ان يساعد!

ال 6 كومينتر

يبدو أن هذا خطأ في التعامل مع '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 أدناه.

https://github.com/numpy/numpy/blob/dae4f67c797176c66281101be8f3b4d6c424735c/numpy/linalg/linalg.py#L2510 -L2524

سوف تحتاج إلى التغيير إلى:

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 للحصول على فكرة عن كيفية صياغة الاختبارات والمكان الذي قد تكون فيه الاختبارات الإضافية مناسبة. امل ان يساعد!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات