Python NumPy numpy.linalg.norm() 函数

Minahil Noor 2023年1月30日
  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

函数产生了矩阵范数。它是奇异值的总和。