热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python比matlab慢,在这个简单的例子中,为什么Matlab看起来比Python慢​​得多

我最近问了aquestionontheoptimizationofamaskfunctioninMatlab.我得到了两个对我有帮助的答案,但似乎根据我的时间,所有Matlab解决

我最近问了

a question on the optimization of a mask function in Matlab.我得到了两个对我有帮助的答案,但似乎根据我的时间,所有Matlab解决方案看起来都比Numpy解决方案慢得多.不同功能的代码可以在我之前的问题中找到,但为了了解我在做什么,我给出了Numpy“循环”解决方案,当然这不是最快的解决方案,但可能是最简单的解读:

def dealiasing2d(where, data):

nk, n0, n1 = data.shape

for i0 in xrange(n0):

for i1 in xrange(n1):

if where[i0, i1]:

data[:, i0, i1] = 0.

我获得(使用Matlab R2014b和与Blas和Lapack相关联的“基本”Numpy 1.9.1)(n0 = n1 = N):

N = 500 ; nk = 500:

Method | time (s) | normalized

----------------|----------|------------

Numpy | 0.05 | 1.0

Numpy loop | 0.05 | 1.0

Matlab find | 0.74 | 14.8

Matlab bsxfun2 | 0.76 | 15.2

Matlab bsxfun | 0.78 | 15.6

Matlab loop | 0.78 | 15.6

Matlab repmat | 0.89 | 17.8

N = 500 ; nk = 100:

Method | time (s) | normalized

----------------|----------|------------

Numpy | 0.01 | 1.0

Numpy loop | 0.03 | 3.0

Matlab find | 0.15 | 13.6

Matlab bsxfun2 | 0.15 | 13.6

Matlab bsxfun | 0.16 | 14.5

Matlab loop | 0.16 | 14.5

Matlab repmat | 0.18 | 16.4

N = 2000 ; nk = 10:

Method | time (s) | normalized

----------------|----------|------------

Numpy | 0.02 | 1.0

Matlab find | 0.23 | 13.8

Matlab bsxfun2 | 0.23 | 13.8

Matlab bsxfun | 0.26 | 15.6

Matlab repmat | 0.28 | 16.8

Matlab loop | 0.34 | 20.4

Numpy loop | 0.42 | 25.1

在我看来,这些结果非常奇怪.对我来说,Numpy和Matlab在科学计算方面非常相似所以性能应该相似,而这里有10倍以上!所以我的第一个猜测是我比较两种语言的方式有问题.另一种可能是我的Matlab设置有问题,但我不明白为什么.或者Matlab和Numpy之间真正的深刻区别?

有人可以用这些函数来验证这些结果吗?你知道为什么Matlab在这个简单的例子中看起来比Python慢​​得多吗?

为了计算Matlab函数的时间,我使用了一个文件:

N = 500;

n0 = N;

n1 = N;

nk = 500;

disp(['N = ', num2str(N), ' ; nk = ', num2str(nk)])

where = false([n1, n0]);

where(1:100, 1:100) = 1;

data = (5.+1i)*ones([n1, n0, nk]);

disp('time dealiasing2d_loops:')

time = timeit(@() dealiasing2d_loops(where, data));

disp([' ', num2str(time), ' s'])

disp('time dealiasing2d_find:')

time = timeit(@() dealiasing2d_find(where, data));

disp([' ', num2str(time), ' s'])

disp('time dealiasing2d_bsxfun:')

time = timeit(@() dealiasing2d_bsxfun(where, data));

disp([' ', num2str(time), ' s'])

disp('time dealiasing2d_bsxfun2:')

time = timeit(@() dealiasing2d_bsxfun2(where, data));

disp([' ', num2str(time), ' s'])

disp('time dealiasing2d_repmat:')

time = timeit(@() dealiasing2d_repmat(where, data));

disp([' ', num2str(time), ' s'])

我测量Python函数的性能

from __future__ import print_function

import numpy as np

from timeit import timeit, repeat

import_lines = {

'numpy_bad': 'from dealiasing_numpy_bad import dealiasing2d as dealiasing',

'numpy': 'from dealiasing_numpy import dealiasing'}

tools = import_lines.keys()

time_approx_one_bench = 5.

setup = """

import numpy as np

N = 500

n0, n1 = N, N

nk = 500

where = np.zeros((n0, n1), dtype=np.uint8)

where[0:100, 0:100] = 1

data = (5.+1j)*np.ones((nk, n0, n1), dtype=np.complex128)

"""

exec(setup)

print('n0 = n1 = {}, nk = {}'.format(N, nk))

print(13*' ' + 'min mean')

durations = np.empty([len(tools)])

for it, tool in enumerate(tools):

setup_tool = import_lines[tool] + setup

duration = timeit(setup_tool + 'dealiasing(where, data)', number=1)

nb_repeat = int(round((time_approx_one_bench - duration)/duration))

nb_repeat = max(1, nb_repeat)

ds = np.array(repeat('dealiasing(where, data)',

setup=setup_tool, number=1, repeat=nb_repeat))

duration = ds.min()

print('{:11s} {:8.2e} s ; {:8.2e} s'.format(

tool.capitalize() + ':', duration, ds.mean()))

durations[it] = duration

fastest = tools[durations.argmin()].capitalize()

durations = durations / durations.min()

print('Durations normalized by the fastest method (' + fastest + '):')

for it, tool in enumerate(tools):

print('{:11s} {:8.3f}'.format(tool.capitalize() + ':', durations[it]))



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
手机用户2602896463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有