二次形成numpy数组乘法的最快方法是什么?

 luomo 发布于 2023-01-30 14:41

我尝试过这两种选择

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

1 个回答
  • 我安装了NumPy和Matlab,对于10000x10000矩阵,它们都需要45毫秒左右.

    考虑到你的时间,我怀疑这x不是一个列向量.如果你想同时对多个列向量进行计算,请查看我对这个问题的答案: 计算"v ^ TA v"表示向量矩阵v.如果x只是一个列向量(在NumPy或Matlab中),那么列出的时间非常慢.

    但是,我怀疑,差异也可能来自你的NumPy安装编译方式.这实际上是NumPy和Matlab使用的BLAS函数的时间.我相信两者都是在我的机器上调用相同的底层库,因为我将NumPy与英特尔的MKL挂钩.如果NumPy是针对像英特尔MKL这样经过良好优化的BLAS构建的,那么像这样的大型矢量运算应该以与Matlab大致相同的速度运行,因为它们都可能调用相同的低级BLAS函数.如果您的NumPy版本未使用优化的BLAS进行编译,则性能会更差.

    如果您知道NumPy的安装已经与MKL链接,则可以尝试设置MKL_NUM_THREADS环境变量以匹配系统上的处理器数量.

    获得正确编译的NumPy版本的一种简单方法是使用预先构建的分发.Anaconda和Enthought非常好,但他们需要订阅才能获得优化版本.学术许可证免费提供.你也可以看看:http://www.lfd.uci.edu/~gohlke/pythonlibs/

    2023-01-30 14:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有