Python NumPy numpy.linalg.norm() 函式
Minahil Noor
2023年1月30日
-
numpy.linalg.norm()
語法 -
示例程式碼:
numpy.linalg.norm()
-
示例程式碼:
numpy.linalg.norm()
查詢二維陣列的範數值 -
示例程式碼:
numpy.linalg.norm()
使用axis
引數查詢向量範數和矩陣範數 -
示例程式碼:
numpy.linalg.norm()
使用ord
引數
Python NumPy numpy.linalg.norm()
函式查詢矩陣或向量範數的值。引數 ord
決定了函式是查詢矩陣範數還是向量範數。它有幾個定義值。
numpy.linalg.norm()
語法
numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)
引數
x |
它是一個類似於陣列的結構。它是用於尋找範數值的輸入陣列。axis 引數的預設值是 None ,因此,只要 ord 是 None ,陣列應該是一維或二維的。 |
ord |
函式的返回值取決於這個引數。它定義了範數的順序。它有幾個值,請檢視這裡。 |
axis |
它是一個整數、None 或有兩個整數值的元組。如果它是一個整數,那麼它就代表函式將沿此軸尋找向量範數。它的預設值是 None ,這意味著函式將找到矩陣範數或向量範數。如果它是一個兩個整數值的元組,那麼函式將返回矩陣範數的值。 |
keepdims |
它是一個布林值引數。它的預設值是 False 。如果它的值為 True ,那麼它將顯示標準化軸的尺寸,尺寸等於 1。 |
返回值
它以 float
值或 N 維陣列的形式返回矩陣或向量的範數。
示例程式碼:numpy.linalg.norm()
我們將使用這個函式來尋找一維陣列的範數。
from numpy import linalg as la
import numpy as np
x = np.array(
[89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)
norm = la.norm(x)
print("The value of norm is:")
print(norm)
輸出:
The value of norm is:
257.4800963181426
它返回了一個浮點型值,這個值就是範數。
示例程式碼:numpy.linalg.norm()
查詢二維陣列的範數值
現在我們將傳遞一個二維的陣列。
from numpy import linalg as la
import numpy as np
x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
norm = la.norm(x)
print("The value of norm is:")
print(norm)
輸出:
The value of norm is:
129.35223229616102
如果我們將 ord
引數設定為 None
以外的其他值,並傳遞一個既非一維也非二維的陣列,由於 axis
引數為 None
,函式將產生一個 ValueError
。
from numpy import linalg as la
import numpy as np
x = np.array([[[4, 2], [6, 4]], [[5, 8], [7, 3]]])
norm = la.norm(x, "nuc")
print("The value of norm is:")
print(norm)
輸出:
Traceback (most recent call last):
File "C:\Test\test.py", line 6, in <module>
norm = la.norm(x,'nuc')
File "<__array_function__ internals>", line 5, in norm
File "D:\WinPython\WPy64-3820\python-3.8.2.amd64\lib\site-packages\numpy\linalg\linalg.py", line 2557, in norm
raise ValueError("Improper number of dimensions to norm.")
ValueError: Improper number of dimensions to norm.
示例程式碼:numpy.linalg.norm()
使用 axis
引數查詢向量範數和矩陣範數
我們將首先找到向量範數。
from numpy import linalg as la
import numpy as np
x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
norm = la.norm(x, axis=0)
print("The vector norm is:")
print(norm)
輸出:
The vector norm is:
[41.78516483 80.95060222 91.83136719]
請注意,函式已經返回了一個 N 維的陣列作為計算出的向量範數。
現在,我們將計算矩陣範數。我們將傳遞有兩個整數值的元組作為 axis
引數。
from numpy import linalg as la
import numpy as np
x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
norm = la.norm(x, axis=(0, 1))
print("The value of matrix norm is:")
print(norm)
輸出:
The value of matrix norm is:
129.35223229616102
示例程式碼:numpy.linalg.norm()
使用 ord
引數
引數 ord
具有多個值。
from numpy import linalg as la
import numpy as np
x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
norm = la.norm(x, "fro")
print("The value of matrix norm is:")
print(norm)
輸出:
The value of matrix norm is:
129.35223229616102
函式產生了 Frobenius
矩陣範數的值。
from numpy import linalg as la
import numpy as np
x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
norm = la.norm(x, "nuuc")
print("The value of matrix norm is:")
print(norm)
輸出:
The value of matrix norm is:
152.28781231351272
函式產生了矩陣範數。它是奇異值的總和。