【发布时间】:2023-03-29 10:50:01
【问题描述】:
这两种方法我都试过了
objective = lambda A, x : (np.dot(x.T ,np.dot(A, x)))[0,0]
objective = lambda A, x : (np.matrix(x).T * np.matrix(A) * np.matrix(x))[0,0]
我的算法运行时间为 5 秒 中学我有 14 秒
使用 MATLAB,我得到了 2 秒
我想使用 Numpy,但显然我需要一种方法来改善这种糟糕的结果。如何获得更快的二次形式矩阵,向量积?
注意:我对代码进行了概要分析,这个 lambda 函数喝了所有的果汁。 改进:我只是删除了 scipy 和 numpy 的原生 Ubuntu 包,然后安装了以下内容
sudo pip install numpy
sudo apt-get install libatlas-base-dev gfortran
sudo pip install scipy
sudo apt-get install libpng-dev libfreetype6-dev
sudo pip install matplotlib
我稍微提高了性能,但仍然低于Matlab
【问题讨论】:
-
最后的
[0, 0]是什么? -
我需要一个标量值,但它返回的数组只有一个值
-
如果你真的定义了函数,它仍然那么慢吗?我 认为 lambda 有点慢
-
您的矩阵有多大?如果它们很大,那么速度瓶颈不在 Numpy 中。获取与英特尔 MKL 或其他一些高性能线性代数库链接的 Numpy 副本。
-
@Erogol:Matlab 使用 Intel MKL,比 ATLAS 优化得更好。除了 ATLAS,您可能想尝试 Openblas,它也是免费的,并且性能可能会更好。
标签: python arrays matlab numpy matrix-multiplication