numpy.linalg.norm()方法用于获取八个不同的矩阵规范或向量规范中的一个。返回值取决于给定参数的值。
np.linalg.norm
np.linalg.norm()是一个numpy库函数,用于计算八个不同的矩阵规范或向量规范中的一个。np.linalg.norm()方法以arr、ord、axis 和keepdims** 为参数,并返回给定矩阵或向量的规范。
语法
numpy.linalg.norm(arr, ord=None, axis=None, keepdims=False)
参数
np.linalg.norm()函数主要接受四个参数:
- arr: 输入的n维数组。
- ord: 代表订单,也就是我们想得到的规范值。规范值取决于这个参数。这可以有八种类型,分别是
命令 | 矩阵的规范 | 矢量的规范 |
无 | Frobenius规范 | 2个规范 |
nuc | 核规范 | - |
inf | max(sum(abs(x), axis=1) | max(abs(x)) |
-inf | min(sum(abs(x), axis=1)) | 最小(abs(x)) |
fro | Frobenius规范 | - |
0 | - | sum(x != 0) |
1 | max(sum(abs(x), axis=0)) | 如下所示 |
-1 | 最小值(sum(abs(x), axis=0)) | 如下所示 |
2 | 2-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()函数的内容。