Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy的运行速度是MATLAB的一半

Numpy的运行速度是MATLAB的一半
EN

Stack Overflow用户
提问于 2013-04-23 20:21:29
回答 1查看 4.6K关注 0票数 13

我一直在将MATLAB代码移植到Python上,经过大量的工作,我已经有了可以工作的东西。然而,缺点是Python比MATLAB运行我的代码更慢。我知道使用优化的ATLAS库会加快速度,但实际上实现这一点会让我感到困惑。下面是正在发生的事情:

我在没有安装BLAS的情况下启动ipython会话:

代码语言:javascript
运行
AI代码解释
复制
import numpy.distutils.system_info as sysinfo
import time
In [11]: sysinfo.get_info('atlas')
Out[11]: {}

timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 13.4 ms per loop

在Matlab中,相同的代码运行速度快两倍

代码语言:javascript
运行
AI代码解释
复制
tic,eig(randn(1E2));toc*1000
    6.5650   

我从Ubuntu存储库安装了未优化的ATAS deb。重新启动ipython,现在我得到:

代码语言:javascript
运行
AI代码解释
复制
In [2]: sysinfo.get_info('atlas')
 ...
Out[2]: 
{'define_macros': [('ATLAS_INFO', '"\\"3.8.4\\""')],
 'include_dirs': ['/usr/include/atlas'],
 'language': 'f77',
 'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'],
 'library_dirs': ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base']}

以及测试代码:

代码语言:javascript
运行
AI代码解释
复制
In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 16.8 ms per loop

所以没有更快的速度。如果有什么不同的话,那就是稍微慢一点。但我还没有切换到优化的BLAS。我遵循以下说明:http://danielnouri.org/notes/category/python/我构建这些库,并用这些库覆盖未优化的版本。我重新启动了ipython,但没有任何变化:

代码语言:javascript
运行
AI代码解释
复制
In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 15.3 ms per loop

难道不能比这更好吗?在这个简单的例子中,MATLAB的速度仍然是原来的两倍。在一个真实的例子中,我在傅立叶域中进行图像配准,Matlab的等效配准比Python版本快4到5倍。有没有人能让Numpy以MATLAB的速度工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-23 20:48:02

简单的例子

Numpy同时计算特征向量和特征值,因此它将花费大约两倍的时间,这与您的速度减慢一致(使用np.linalg.eigvals仅计算特征值)。

最后,np.linalg.eig是dgeev的一个小包装器,很可能同样的事情也会发生在使用MKL的Matlab中。

为了在线性代数中获得几乎相同的速度,您可以针对MKL或OpenBLAS构建Numpy。ContinuumEnthought提供了一些商业服务(可能对学者是免费的)。您还可以获得MKL并构建Numpy yourself

真实世界的例子

4倍的速度似乎太慢了(我用Numpy重写了一些Matlab代码,两个程序的执行方式非常相似)。考虑到最近的Matlab版本提供了一个简单的JIT,所以循环并不像通常的Python实现那样糟糕。如果你正在做很多快速傅立叶变换,你可以从使用FFTW wrapper (pyFFTW看起来不错,但我还没有用过它)中受益。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16178471

复制
相关文章
python 调用Google Tran
调用Google 翻译API进行翻译 #!/usr/bin/python #coding: UTF-8 import sys reload(sys) sys.setdefaultencoding('utf8') from xml.etree import ElementTree as ET #引入解析xml文件的模块 import re import urllib,urllib2 #引入接入网络接口API的模块 from socket import error as SocketE
py3study
2020/01/09
1.1K0
博客上如何设置最佳 Google Adsense 广告投放位置
前面我总结了个人的 Google Adsense 投放经验,其中说到最重要的是位置, Google的建议是:博客一般分成两种页面,主页(列表页),日志页,所以可以分别对两种位置就行针对性摆放:
Denis
2023/04/14
9740
博客上如何设置最佳 Google Adsense 广告投放位置
Python3调用Google翻译
想弄一个批量翻译的东西,奈何百度翻译别人根本不研究,所以只能看谷歌翻译的了;这份代码的作者写的太聪明了,是真的很棒,思路很好,看到这样的代码简直年轻10岁
Elapse
2020/08/17
1.5K1
Google Python风格规范(上)
好的代码风格,给人舒服的感觉,今天介绍一下谷歌的Python风格规范,由于规范比较多,将分为两次介绍。
王强
2018/08/09
7090
怎样用Google APIs和Google的应用系统进行集成(3)—-调用Google 发现(Discovery)API的RESTful服务
说了这么多,那么首先同意我以Google Discovery RESTful服务为例,给大家演示怎样用最普通的Java代码调用Google Discovery RESTful服务。
全栈程序员站长
2022/07/12
9490
google code 上源码的下载方法
SVN全称是Subversion,是Apache的一个子项目 ,具体能够到SVN中文站(http://www.subversion.org.cn/)去了解下。Google Code是Google的一个开放源码计划,当中包含源码托管,即提供一个server来保存、共享和管理源码。每一个人都能够创建自己的Project,至于空间的大小,请看下图:
全栈程序员站长
2022/07/09
9650
google code 上源码的下载方法
如何屏蔽博客园中的Google广告
博客园中每篇文章的评论窗口最下面就带了一个Google的广告,当然我这个博客也不例外。不过这些广告我看着就不爽,于是就想办法把该死的广告去掉。使用Mathon2打开博客园中的任何一篇文章,选定Google广告和周围区域,右键“查看选定区域代码”就可以看到原来是Google的JS文件在我的页面中生成了一个Iframe,具体代码为:
深蓝studyzy
2022/06/15
7530
如何用 Google Colab 练 Python?
自动配置、有效求助、协作编程、版本控制。一站式解决 Python 新手练习中的痛点
王树义
2019/03/08
1.9K0
如何将你的Hexo博客部署到Google Firebase上
博主最近在 白嫖万恶的资本 将博客部署到新的CDN上,所以在寻找免费的静态Web应用部署工具,发现了Google Firebase。
pai233
2022/04/26
1.5K0
如何将你的Hexo博客部署到Google Firebase上
google colab上如何下载bert相关模型
https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
西西嘛呦
2021/03/22
2.4K0
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.3K0
Google 的 Firebase 如何删除项目
如何关闭google的安全搜索
我们平常使用google搜索,默认是已启用安全搜索的。例如在google搜索“1”,右上角会出现“已启用安全搜索”。 进入google帮助找到安全搜索内容https://support.google.com/websearch/answer/510 屏蔽 Google 上的色情内容 您可以使用安全搜索设置来滤除 Google 上包含露骨内容的搜索结果(例如色情内容)。安全搜索并非 100% 准确,但它能帮您屏蔽掉大多数成人内容。 您可将安全搜索用作一种家长控制方式,以使孩子远离您手机
小歪
2018/04/04
9.2K0
如何关闭google的安全搜索
Google S2 中的 CellID 是如何生成的 ?
笔者在《高效的多维空间点索引算法 — Geohash 和 Google S2》文章中详细的分析了 Google S2 的算法实现思想。文章发出来以后,一部分读者对它的实现产生了好奇。本文算是对上篇文章的补充,将从代码实现的角度来看看 Google S2 的算法具体实现。建议先读完上篇文章里面的算法思想,再看本篇的代码实现会更好理解一些。
一缕殇流化隐半边冰霜
2018/08/30
1.8K0
Google S2 中的 CellID 是如何生成的 ?
Google Colab上的YOLOv3 PyTorch
对于计算机视觉爱好者来说,YOLO(一次只看一次)是一种非常流行的实时对象检测概念,因为它的速度非常快并且性能出色。
代码医生工作室
2020/04/14
2.7K0
Google Colab上的YOLOv3 PyTorch
Openlayers中Google地图的加载
在实现的时候,参考了mygisforum的文章http://blog.csdn.net/mygisforum/article/details/7582449的内容,同时结合gwc的gridset,实现了google切片在Openlayers2中的调用与展示。
牛老师讲GIS
2018/10/23
2K0
Openlayers中Google地图的加载
Google Colab上安装TensorRT
NVIDIA TensorRT是一个高性能深度学习推理平台。它包括深度学习推理优化器和运行时,可为深度学习推理应用程序提供低延迟和高吞吐量。推理时,基于TensorRT的应用程序比仅CPU平台的执行速度快40倍。使用TensorRT,您可以优化所有主流框架中训练出的神经网络模型。
云水木石
2019/07/02
2.4K0
Google Colab上安装TensorRT
点击加载更多

相似问题

复制NSMenuItems最简单的方法是什么?

13

复制列的最简单方法是什么?

10

使用jQuery调整导航菜单大小的最简单方法

31

制作这个垂直菜单最简单的方法是什么?

30

为Android按钮添加箭头的最简单方法是什么

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档