np.linalg.norm()函数的详细指南

4,194 阅读3分钟

numpy.linalg.norm()方法用于获取八个不同的矩阵规范或向量规范中的一个。返回值取决于给定参数的值。

np.linalg.norm

np.linalg.norm()是一个numpy库函数,用于计算八个不同的矩阵规范或向量规范中的一个。np.linalg.norm()方法以arr、ord、axiskeepdims** 为参数,并返回给定矩阵或向量的规范。

语法

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

参数

np.linalg.norm()函数主要接受四个参数:

  • arr: 输入的n维数组。
  • ord: 代表订单,也就是我们想得到的规范值。规范值取决于这个参数。这可以有八种类型,分别是
命令矩阵的规范矢量的规范
Frobenius规范2个规范
nuc核规范-
infmax(sum(abs(x), axis=1)max(abs(x))
-infmin(sum(abs(x), axis=1))最小(abs(x))
froFrobenius规范-
0-sum(x != 0)
1max(sum(abs(x), axis=0))如下所示
-1最小值(sum(abs(x), axis=0))如下所示
22-norm(最大符号值)如下所示
-2最小奇异值如下所示
其他-sum(abs(x)**ord)**(1./ord)
  • :如果轴是整数,则计算x的轴的向量值。如果轴是2元组,则计算指定矩阵的矩阵值。如果轴不存在,那么将返回一个矢量标准(当x是1-D时)或一个矩阵标准(当x是2D时)。
  • keepdims: 如果keepdims参数被设置为True,被规范化的轴将作为尺寸为1的维度留在结果中。有了keepdims选项,结果将正确地针对原始x进行广播。

返回值

linalg norm()函数返回给定矩阵或向量的规范。

寻找一个数组的法线

请看下面的代码:

# Program to calculate the norm of an array
import numpy as np

# Creating an array
arr1 = np.arange(12)-2
arr2 = arr1.reshape(3, 4)
# Printing the array
print("First array is: \n", arr1)
print("\nSecond array is:\n ", arr2)

# Calculating norm value with different order value
print(np.linalg.norm(arr1), "\n")
print(np.linalg.norm(arr2), "\n")
print(np.linalg.norm(arr1, np.inf), "\n")
print(np.linalg.norm(arr2, np.inf), "\n")
print(np.linalg.norm(arr1, -np.inf), "\n")
print(np.linalg.norm(arr1, -np.inf), "\n")
print(np.linalg.norm(arr1, 1), "\n")
print(np.linalg.norm(arr2, 1), "\n")
print(np.linalg.norm(arr1, -1), "\n")
print(np.linalg.norm(arr1, -1))

输出

The array is:
 [[[1 2]
  [2 3]
  [3 4]]

 [[4 5]
  [4 5]
  [3 4]]

 [[5 6]
  [4 5]
  [4 5]]]
Shape of the array is:  (3, 3, 2)
Output is:
 [ 9 12]
➜  pyt clear
➜  pyt python3 app.py
First array is:
 [-2 -1  0  1  2  3  4  5  6  7  8  9]

Second array is:
  [[-2 -1  0  1]
 [ 2  3  4  5]
 [ 6  7  8  9]]
17.029386365926403

17.029386365926403

9.0

30.0

0.0

0.0

48.0

15.0

/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/numpy/linalg/linalg.py:2514: RuntimeWarning: divide by zero encountered in reciprocal
  absx **= ord
0.0

0.0

解释

在这个例子中,我们首先创建了两个数组,一个是一维的,另一个是二维的,并且我们打印了出来。

之后,我们计算了不同参数值下的规范值,我们可以看到,对于不同的参数,其值是不同的。

寻找给定向量的法线

要找到给定向量的法线,请使用linalg norm()函数:

# Program to calculate norm of an array
import numpy as np

# Making vector array
arr1 = np.array([[5, 4, 3], [-3, 2, 1]])
print("The array is: \n", arr1)

# Printing Norm for different order values
print(np.linalg.norm(arr1, axis=0), "\n")

print(np.linalg.norm(arr1, axis=1), "\n")

print(np.linalg.norm(arr1, ord=1, axis=0), "\n")

输出

The array is:
 [[ 5  4  3]
 [-3  2  1]]
[5.83095189 4.47213595 3.16227766]

[7.07106781 3.74165739]

[8. 6. 4.]

解释

在这个例子中,我们首先创建了一个向量数组,然后我们打印了它。

最后,我们调用了linalg.norm()来计算不同阶数的法线值。

这就是np.linalg.norm()函数的内容。