Python NumPy numpy.linalg.norm() 函式

Minahil Noor 2023年1月30日 2020年11月7日
  1. numpy.linalg.norm() 語法
  2. 示例程式碼:numpy.linalg.norm()
  3. 示例程式碼:numpy.linalg.norm() 查詢二維陣列的範數值
  4. 示例程式碼:numpy.linalg.norm() 使用 axis 引數查詢向量範數和矩陣範數
  5. 示例程式碼:numpy.linalg.norm() 使用 ord 引數
Python NumPy numpy.linalg.norm() 函式

Python NumPy numpy.linalg.norm() 函式查詢矩陣或向量範數的值。引數 ord 決定了函式是查詢矩陣範數還是向量範數。它有幾個定義值。

numpy.linalg.norm() 語法

numpy.linalg.norm(x,
                  ord= None,
                  axis= None,
                  keepdims= False) 

引數

x 它是一個類似於陣列的結構。它是用於尋找範數值的輸入陣列。axis 引數的預設值是 None,因此,只要 ordNone,陣列應該是一維或二維的。
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

函式產生了矩陣範數。它是奇異值的總和。