首页 > 解决方案 > 为什么 np.linalg.norm(x,2) 比直接求解慢?

问题描述

示例代码:

import numpy as np
import math
import time

x=np.ones((2000,2000))

start = time.time()
print(np.linalg.norm(x, 2))
end = time.time()
print("time 1: " + str(end - start))

start = time.time()
print(math.sqrt(np.sum(x*x)))
end = time.time()
print("time 2: " + str(end - start))

输出(在我的机器上)是:

1999.999999999991
time 1: 3.216777801513672
2000.0
time 2: 0.015042781829833984

它表明 np.linalg.norm() 需要超过 3s 来解决它,而直接解决方案只需要 0.01s。为什么 np.linalg.norm() 这么慢?

标签: pythonperformancenumpynorm

解决方案


np.linalg.norm(x, 2)计算 2 范数,取最大奇异值

math.sqrt(np.sum(x*x))计算 frobenius 范数

这些操作是不同的,因此它们花费不同的时间也就不足为奇了。Frobenius 范数和矩阵的 2 范数有什么区别?关于 math.SO 可能会感兴趣。


推荐阅读