Numpy: Norma Frobenius didefinisikan untuk vektor?

Dibuat pada 6 Feb 2020  ·  6Komentar  ·  Sumber: numpy/numpy

Ini mungkin bukan pertanyaan implementasi, dan lebih ke pertanyaan "filosofi", tetapi bukankah Norma Frobenius harus bekerja pada Vektor? Sumber: Wolfram

Saat ini, Norma Frobenius di numpy tidak menerima vektor:

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'))

Yang mengakibatkan:

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

Komentar yang paling membantu

Masalahnya sebenarnya sedikit lebih jauh di dalam kode - jika Anda mengikuti penelusuran kembali dari kesalahan yang Anda terima semula, Anda seharusnya dapat menemukan bit yang menyinggung.

Seperti disebutkan dalam diskusi di #14719 dan #14215, perilaku untuk >2 dimensi adalah masalah terpisah - akan lebih baik jika Anda dapat membatasi PR ini pada bug dalam penanganan kwarg.

Re: sumber daya untuk pengujian/kontribusi: lihat pedoman kontribusi NumPy . Anda juga dapat melihat pengujian linalg di numpy/linalg/tests/test_linalg.py untuk mendapatkan gambaran tentang bagaimana pengujian diformulasikan dan di mana pengujian tambahan mungkin sesuai. Semoga membantu!

Semua 6 komentar

Ini terlihat seperti bug dalam menangani 'fro' kwarg:

>>> print(np.linalg.norm(b))
1.7547099704258247

Perhatikan bahwa norma Frobenius adalah default ketika kwarg ord adalah None.

xref gh-14719 dan gh-14215: Kami berpikir untuk menghentikan kasus umum, tetapi kemudian tidak pernah melanjutkan karena meskipun tidak ada perlawanan besar, ada beberapa. Dan beberapa paket lain mendefinisikannya seperti itu. Jadi masalahnya adalah memutuskan ke mana tepatnya harus pergi ke sini ...

Seperti yang ditunjukkan Ross kepada saya, masalah/PR yang saya tautkan hanya terkait secara tangensial dan ini jelas merupakan bug dalam penanganan "fro" .

PR untuk mengatasi bug dalam penanganan kwarg (dan tes yang menyertainya) diterima! Tangkapan bagus @TNonet

Karena ini adalah masalah pertama saya, Apakah ada sumber daya untuk membuat tes yang tepat dan permintaan tarik?

(Juga, jika saya ingin mengkloning repo numpy dan menjalankan setup.py, bagaimana saya memastikan versi numpy mana yang saya gunakan ketika saya mengimpor numpy?)

Saya berpendapat jika ord adalah 'maju', maka baris 2512-14 di bawah.

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

Perlu diubah menjadi:

if ((ord is None) or 
    (ord in ('f', 'fro')) or 
    (ord == 2 and ndim == 1)): 

Dengan asumsi semua orang setuju bahwa array urutan ke-n memiliki Norma Forbenious yang secara alami menjumlahkan kuadrat dari setiap elemen.

Masalahnya sebenarnya sedikit lebih jauh di dalam kode - jika Anda mengikuti penelusuran kembali dari kesalahan yang Anda terima semula, Anda seharusnya dapat menemukan bit yang menyinggung.

Seperti disebutkan dalam diskusi di #14719 dan #14215, perilaku untuk >2 dimensi adalah masalah terpisah - akan lebih baik jika Anda dapat membatasi PR ini pada bug dalam penanganan kwarg.

Re: sumber daya untuk pengujian/kontribusi: lihat pedoman kontribusi NumPy . Anda juga dapat melihat pengujian linalg di numpy/linalg/tests/test_linalg.py untuk mendapatkan gambaran tentang bagaimana pengujian diformulasikan dan di mana pengujian tambahan mungkin sesuai. Semoga membantu!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat