์ด๊ฒ์ ๊ตฌํ ์ง๋ฌธ์ด ์๋๋ผ "์ฒ ํ"์ง๋ฌธ์ ๊ฐ๊น์ง๋ง Frobenius Norm์ด ๋ฒกํฐ์์ ์๋ํ์ง ์์์ผํฉ๋๊น? ์ถ์ฒ : Wolfram
ํ์ฌ numpy์ Frobenius Norm์ ๋ฒกํฐ๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค.
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
ord
kwarg๊ฐ None์ด๋ฉด Frobenius ํ์ค์ด ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
xref gh-14719 ๋ฐ gh-14215 : ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ์ฌ๋ก๋ฅผ ํ๊ธฐ ํ ๊ฒ์ ๊ณ ๋ คํ์ง๋ง ํฐ ์ ํญ์ด ์์์ง๋ง ์ผ๋ถ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์งํํ์ง ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ๋ค๋ฅธ ํจํค์ง๋ ๊ทธ๊ฒ์ ๊ทธ๋ ๊ฒ ์ ์ํฉ๋๋ค. ๊ทธ๋์ ๋ฌธ์ ๋ ์ ํํ ์ด๋๋ก ๊ฐ์ผํ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค ...
Ross๊ฐ ๋์๊ฒ ์ง์ ํ๋ฏ์ด ๋ด๊ฐ ์ฐ๊ฒฐ ํ ๋ฌธ์ / PR์ ์ ์ ์ ์ผ๋ก ๋ง ๊ด๋ จ๋์ด ์์ผ๋ฉฐ ์ด๋ "fro"
์ฒ๋ฆฌ์ ๋ฒ๊ทธ์
๋๋ค.
kwarg ์ฒ๋ฆฌ (๋ฐ ์๋ฐ๋๋ ํ ์คํธ)์ ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ PR์ ํ์ํฉ๋๋ค! ์ข์ ์บ์น @TNonet
์ด๊ฒ์ด ๋ด ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ ํ ํ ์คํธ ๋ฐ ํ ์์ฒญ์์ํ ๋ฆฌ์์ค๊ฐ ์์ต๋๊น?
(๋ํ numpy repo๋ฅผ ๋ณต์ ํ๊ณ setup.py๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ numpy๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ numpy ๋ฒ์ ์ ์ด๋ป๊ฒ ํ์ธํ ์ ์์ต๋๊น?)
๋๋ ord๊ฐ 'fro'๋ผ๋ฉด 2512-14 ์ค ์๋์ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
๋ค์์ผ๋ก ๋ณ๊ฒฝํด์ผํฉ๋๋ค.
if ((ord is None) or
(ord in ('f', 'fro')) or
(ord == 2 and ndim == 1)):
๋ชจ๋ ์ฌ๋์ด n ์ฐจ ๋ฐฐ์ด์ ๊ฐ ์์์ ์ ๊ณฑ์ ์์ฐ์ค๋ฝ๊ฒ ํฉ์ฐํ๋ Forbenious Norm์ด ์๋ค๋ ๋ฐ ๋์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ฌธ์ ๋ ์ค์ ๋ก ์ฝ๋์์ ์กฐ๊ธ ๋ ์๋์ ์์ต๋๋ค. ์๋๋ฐ์ ์ค๋ฅ์ ์ญ ์ถ์ ์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์ ๊ฐ๋๋ ๋นํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
# 14719 ๋ฐ # 14215์ ํ ๋ก ์์ ์ธ๊ธํ๋ฏ์ด> 2 ์ฐจ์์ ๋์์ ๋ณ๋์ ๋ฌธ์ ์ ๋๋ค.์ด PR์ kwarg ์ฒ๋ฆฌ์ ๋ฒ๊ทธ๋ก ์ ํ ํ ์ ์๋ค๋ฉด ๊ฐ์ฅ ์ข์ต๋๋ค.
Re : ํ
์คํธ / ๊ธฐ์ฌ๋ฅผ์ํ ๋ฆฌ์์ค : NumPy์ ๊ธฐ์ฌ ๊ฐ์ด๋ ๋ผ์ธ์ ์ดํด๋ณด์ญ์์ค. numpy/linalg/tests/test_linalg.py
์์ linalg ํ
์คํธ๋ฅผ ์ดํด๋ณด๊ณ ํ
์คํธ๊ฐ ๊ณต์ํ๋๋ ๋ฐฉ๋ฒ๊ณผ ์ถ๊ฐ ํ
์คํธ๊ฐ ์ ์ ํ ์์น์ ๋ํ ์์ด๋์ด๋ฅผ ์ป์ ์๋ ์์ต๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฌธ์ ๋ ์ค์ ๋ก ์ฝ๋์์ ์กฐ๊ธ ๋ ์๋์ ์์ต๋๋ค. ์๋๋ฐ์ ์ค๋ฅ์ ์ญ ์ถ์ ์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์ ๊ฐ๋๋ ๋นํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
# 14719 ๋ฐ # 14215์ ํ ๋ก ์์ ์ธ๊ธํ๋ฏ์ด> 2 ์ฐจ์์ ๋์์ ๋ณ๋์ ๋ฌธ์ ์ ๋๋ค.์ด PR์ kwarg ์ฒ๋ฆฌ์ ๋ฒ๊ทธ๋ก ์ ํ ํ ์ ์๋ค๋ฉด ๊ฐ์ฅ ์ข์ต๋๋ค.
Re : ํ ์คํธ / ๊ธฐ์ฌ๋ฅผ์ํ ๋ฆฌ์์ค : NumPy์ ๊ธฐ์ฌ ๊ฐ์ด๋ ๋ผ์ธ์ ์ดํด๋ณด์ญ์์ค.
numpy/linalg/tests/test_linalg.py
์์ linalg ํ ์คํธ๋ฅผ ์ดํด๋ณด๊ณ ํ ์คํธ๊ฐ ๊ณต์ํ๋๋ ๋ฐฉ๋ฒ๊ณผ ์ถ๊ฐ ํ ์คํธ๊ฐ ์ ์ ํ ์์น์ ๋ํ ์์ด๋์ด๋ฅผ ์ป์ ์๋ ์์ต๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.