矩阵和向量的各种范数(定义 + 例题)

一. 矩阵和向量的各种范数

定义

矩阵的不同范数的定义如下:

1. 1范数(L1范数):矩阵的每一列的绝对值之和中的最大值。

2. 2范数(L2范数):矩阵的特征值中的最大值的平方根。

3. 无穷范数:矩阵的每一行的绝对值之和中的最大值。

4. F范数(Frobenius范数):矩阵的每个元素的平方和的平方根。

对于向量的不同范数的定义如下:

1. 0范数:向量中非零元素的个数。

2. 1范数(L1范数):向量的每个元素的绝对值之和。

3. 2范数(L2范数):向量的每个元素的平方和的平方根。

4. 无穷范数:向量中绝对值最大的元素。

例题

1.求矩阵的[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]的1范数、2范数、无穷范数、F范数。求向量x=(-1, 2, 4)^T的0范数,1范数,2范数和无穷范数。 首先给出具体的计算公式,然后给出实现代码和基于代码的计算结果

计算公式: 略

实现代码:

import numpy as np
# 定义矩阵
matrix = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 1范数
norm_1 = np.linalg.norm(matrix, ord=1)
# 2范数
norm_2 = np.linalg.norm(matrix, ord=2)
# 无穷范数
norm_inf = np.linalg.norm(matrix, ord=np.inf)
# F范数
norm_F = np.linalg.norm(matrix, ord='fro')
# 输出
print(f"矩阵的1范数:{norm_1}")
print(f"矩阵的2范数:{norm_2}")
print(f"矩阵的无穷范数:{norm_inf}")
print(f"矩阵的F范数:{norm_F}")

# 定义向量
vector = np.array([-1, 2, 4])
# 0范数
norm_0 = np.count_nonzero(vector)
# 1范数
norm_1 = np.linalg.norm(vector, ord=1)
# 2范数
norm_2 = np.linalg.norm(vector, ord=2)
# 无穷范数
norm_inf = np.linalg.norm(vector, ord=np.inf)
# 输出
print(f"向量的0范数:{norm_0}")
print(f"向量的1范数:{norm_1}")
print(f"向量的2范数:{norm_2}")
print(f"向量的无穷范数:{norm_inf}")

2.求向量x=(4,2,4,3)^T的0范数,1范数,2范数和无穷范数。自动生成一个3行列的矩阵,求矩阵的1-范数、2-范数、无穷-范数、F-范数。首先给出具体的计算公式,然后给出实现代码和基于代码的计算结果。

计算公式:略

实现代码:

import numpy as np

# 定义向量x
x = np.array([4, 2, 4, 3])

# 计算不同范数
norm_0 = np.count_nonzero(x)
norm_1 = np.sum(np.abs(x))
norm_2 = np.linalg.norm(x)
norm_inf = np.max(np.abs(x))

print(f"向量x的0范数:{norm_0}")
print(f"向量x的1范数:{norm_1}")
print(f"向量x的2范数:{norm_2}")
print(f"向量x的无穷范数:{norm_inf}")

# 生成一个3x3的随机矩阵M
M = np.random.rand(3, 3)

# 计算不同范数
norm_1 = np.max(np.sum(np.abs(M), axis=0))
norm_2 = np.sqrt(np.max(np.linalg.eigvals(M.T @ M)))
norm_inf = np.max(np.sum(np.abs(M), axis=1))
norm_F = np.linalg.norm(M, ord='fro')

print(f"矩阵M的1范数:{norm_1}")
print(f"矩阵M的2范数:{norm_2}")
print(f"矩阵M的无穷范数:{norm_inf}")
print(f"矩阵M的F范数:{norm_F}")

3.随机初始化一个10维向量,求向量的0范数,1范数,2范数和无穷范数。求矩阵[[5, 1, 0, -2], [2, 0, 3, 1], [4, 1, 2, 5], [0, -3, 1, 2]]的1-范数、2-范数、无穷范数、F-范数。首先给出具体的计算公式,然后给出实现代码和基于代码的计算结果。

计算公式:略

实现代码:

random_vector = np.random.rand(10)

# 计算不同范数
norm_0 = np.count_nonzero(random_vector)
norm_1 = np.sum(np.abs(random_vector))
norm_2 = np.linalg.norm(random_vector)
norm_inf = np.max(np.abs(random_vector))

print(f"随机向量的0范数:{norm_0}")
print(f"随机向量的1范数:{norm_1}")
print(f"随机向量的2范数:{norm_2}")
print(f"随机向量的无穷范数:{norm_inf}")

# 定义矩阵
matrix = np.array([[5, 1, 0, -1], [2, 0, 3, 1], [4, 1, 2, 5], [0, -3, 1, 2]])

# 计算不同范数
norm_1 = np.max(np.sum(np.abs(matrix), axis=0))
norm_2 = np.sqrt(np.max(np.linalg.eigvals(matrix.T @ matrix)))
norm_F = np.linalg.norm(matrix, ord='fro')

print(f"矩阵的1范数:{norm_1}")
print(f"矩阵的2范数:{norm_2}")
print(f"矩阵的F范数:{norm_F}")

版权声明:本文为博主作者:沉默的同学原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_67933746/article/details/134273451

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2024年4月1日
下一篇 2024年4月1日

相关推荐