使用Python编程算法

你好.
我是Python的新手.对我来说,这似乎是一种非常有趣的语言.它的
简单非常有吸引力.
但是,通常说Python不是编译,而是
我的意思是解释编程语言,这不是C,因为
感觉.
我正在研究有关运营研究的博士学位论文
启发式算法等,我正在考虑的可能性
编程我在Python中的所有算法.
通常的选择是C,但我更喜欢Python.
我看到使用Python的主要缺点是:
*据我了解,Python不是汇编的事实
语言使其比C慢,在执行大量
算法或程序中的计算.
*我不知道在Python中找到与
我的研究领域.
*我知道Python是一种"严肃"且成熟的编程语言,
课程.但是我不知道它在研究中是否被视为"很有趣"
语境. Python被认为是一种很好的编程语言
实施操作研究算法,例如启发式方法和
其他软计算算法?
也许这不是正确的论坛,但也许您可以给我一些
提示或提示...
先感谢您.

# 回答1


Vicent Giner写道:
通常的答案是发展
时间比运行时间更重要.
由于您可能正在使用数组,
您可能会看Numpy,在哪里
数字处理使用编译的C代码.
尝试使用Python和您的领域Google
兴趣.你很可能找到
满足您需求的基于Python的软件包.
祝你好运.
Colin W.
# 回答2


5月17日,5:32*PM,Vicent Giner 您正在听到"不可能和无用"的消息 - 两项操作都没有.
"堆栈"对python非常重要(有一个无叠的python,
我明白),这使持久性更加方便.它是
仍然是计算机,仍然是一种语言.您可能会问它的状况如何
最好的演讲者知道,看看这一点,我不能告诉你.某些
迄今为止,Python的基本面可能无法探索,因为它从90年代开始
堆栈是元素.
我会认为您对控制操作感兴趣,
是的,Python具有,控制很重要.标准库是一个
对我来说,尺寸不错(我不会加倍).有一个准备的图形
模块.有代码主要的文字,包括列表 - 和 - a
元组.我想您正在寻找动态的卖点
分配(a.barproperty ='uneardof'),typefreeness(a = [2,'bcd']),
动态执行(exec('print 2'),它促进了可能性
自我参考性),类型感知功能指针,可变长度
程序参数和平台独立性.
我认为您只是在正确的时间问.是的,这是一个令人印象深刻的
列表.
python有一个捕捉,其中哪种力量的重要性
那是,我不知道.但是我确实知道您有责任找到什么
新闻组.现在,有数千美元的机构蒂姆 e
钱,什么控制?我会暂时假设你是
没有秘密比较其他语言.我不认为你会喜欢
如果你不明智.
# 回答3


5月18日,12:32 AM,Vicent Giner 首先:无论您做什么,都将numpy用于所有数值工作(和
可能是Scipy).请记住,带有Numpy的Python往往更快
比matlab.任何适用于MATLAB的有关矢量化的东西
为了速度,也适用于numpy.
如果您的程序运行得太慢,请尝试使用Psyco JIT编译器
第一的.如果这无济于事,请尝试以下一项:
- 使用Cython或Pyrex并编译您的(修改)Python代码
- 使用scipy.weave内联C ++
- 在C中写一个函数并使用CTYPES调用
- 在fortran中写一个函数,并使用
f2py
通常,总体上只有小瓶颈很重要
表现.众所周知,很难猜测它们在哪里.
因此:首先将所有内容都写在Python中,然后将您的代码介绍为
识别瓶颈.只需要翻译重要的瓶颈
到pyrex,c或fortran. http://www.scipy.org/performancepython
Google Numpy,Scipy,Matplolib和Sage.
NASA使用Python来处理哈勃望远镜的图像数据.
# 回答4


5月17日,7:32*PM,Vicent Giner 我想Python并不是一种很好的语言.算法
在平原Python中实施的速度比C慢很多倍
(数百?).实际上,算法用C编写并包裹
Python.我在操作研究方面的经验接近零,但是一旦我
寻找Python和IIRC的线性编程工具包,我只
可以找到GLPK(称为纸浆)的微不足道的包装器.
我的意见:选择编译或字节编译的语言.选择
最适合算法的语言范式.
# 回答5


我知道什么:
我听到的数字是Python比C慢10-100倍.
Python如果您可以等待更长的10-100倍.虽然这不是真的
使用numpy和/或psyco缓慢.
Python似乎有一个非常广泛的报告可用于
它.尽管我不知道数学领域的事情.如果你想要什么
足够晦涩,然后您可能会发现C/C ++而不是Python.你
可能会在几秒钟内通过谷歌搜索发现.
Python的优势(生产时间除外)是
简单,更可读性,简单地作为传达算法的语法.
就像伪代码一样...但是可以运行. ;)
# 回答6


5月18日,上午5:32,Vicent Giner 它比书写良好的C代码慢. C码可能会更慢
比Python如果C的作者对C不太熟悉,
另一方面,Python的实施列表,字典,
集合等是非常优化的代码(有些人说这是最重要的代码
在世界上进行微调实施)和一个斜面的书面阵列/
dict/设置 C中的介绍可能比Python慢​​.
为什么不问你的同龄人? AFAIK(由于我不是研究人员,只是一个高级
有"太多时间"编程的学校学生,我什至没有
熟悉操作研究),在操作研究环境中(AS
我从Wikipedia了解到)重要的是算法
而不是纯速度,而编写代码只是为了描述
您正在设计算法.因此,任何不是一种编程语言
深奥的语言(例如Whitespace或Brainfuck)不会
被认为是"简单的".
5月18日,11:37*AM,Dennis Lee Bieber * * * * Python已编译 - 这就是.pyc和.pyo filescontain
(奇怪的是,必须指定命令行参数以获取
"优化" .pyo,而不是带有调试数据嵌入的.pyc).
只是要注意,当前,"优化" Python代码(使用-O或-OO)
使您的代码速度更快,因为尚未(尚未)这样做
除了删除docstrings. -o(Ptimized)标志保留
为了添加可能产生某些功能的优化
无法使用或行为不同(例如,删除Docstrings
破坏使用__DOC__)的代码.
# 回答7


除了Numpy&Scipy,还有更多的Python Scientific Soft
更糟糕的是:http://scipy.org/topical_software http://pypi.python.org/pypi?:action = .....show = all&c = 385
在18,06:25,Henrique Dante de Almeida 您可能对OpenOpt感兴趣,它与LP求解器有连接
glpk,cvxopt的One和lp_solve(以前和后者允许处理MILP
同样)http://scipy.org/scipy/scikits/wiki/lp(_@_ _)
5月18日,上午5:46," inhahe" 仅当您使用Python就好像是Visual Basic的方言时,才是正确的.如果
您使用正确的工具,例如Numpy,Python可以足够快.还
请注意,python并不比任何其他语言都慢(包括c)
如果代码为i/o绑定.事实证明,大多数代码是i/o绑定,
甚至许多科学计划.
在科学研究中,CPU时间很便宜,并且花费了时间编程
太贵了.而不是优化运行太慢的代码,而是
通常使用更豪华的硬件,例如Parallell
电脑.对于Python,我们例如拥有mpi4py,这使我们可以访问
MPI.编写科学软件可能是一个很好的建议
从一开始就可以并行.
我在大学的第一年学习了帕斯卡.当我开始编程时
MATLAB,我带来了新手Pascal程序员的各种习惯.
不用说,我的程序非常缓慢.我学到了C
为MATLAB编写更快的" MEX"扩展名.但最终,我的技能
改进了,我发现我的MATLAB程序不再需要C.
我花了将近3年的时间才能解除我所获得的不良习惯
在编程帕斯卡时.当
实际上,是程序员无法正确使用它.
# 回答8


在星期六,17 2008年5月15:32:29 -0700(PDT),Vicent Giner
其他人已经说过有关如何使用python的话
效率地.我不喜欢的东西
参见提到:
你要做研究_about_
有问题的算法还是将是研究
_use_这些算法得出结论
关于其他事情?
大多数答复似乎都假设后者.
如果是前者,那么Python似乎绝对是
一个绝佳的选择 - 当您想尝试时
新事物将更快地尝试
在Python中,当您写出结果时
不需要伪代码作为
真实代码指南,因为Python
将像
伪代码将是,等等.
David C. Ullrich
# 回答9


5月18日,下午4:20,David C. Ullrich 我第二.因此,我以前的陈述"科学
研究,CPU时间很便宜,并且花费的时间昂贵."
如果不清楚我的意思,您的帖子可以用作
澄清.但是,Giner是"开发"还是"使用"
算法,他应该比CPU更重视自己的劳动.中央处理器
劳动力(即计算)非常便宜.手动劳动(即
编程)非常昂贵.在任何情况下,他都可以从使用中受益
Python.今天,科学家的首选计算机语言数量是
不是Fortran77,而是各种高级语言,例如Matlab,S,IDL,
Perl和Python.
一个相关的问题是:真正需要多少"速度"?如果是Giner
使用常规统计数据分析数据集(ANOVA,多个
回归等),何时停止python(带有numpy)
充足的?以我的经验,在数据集中的传统统计数据
可以将100,000或1,000,000个样本视为孩子在现代的玩法
台式电脑.一个确实需要大量数据之前
值得使用其他任何东西.如果可以节省几秒钟
CPU时间通过花费几个小时编程,而努力不是
只是徒劳的,这是彻头彻尾的浪费和愚蠢的.
其他应该提到的东西:
算法的复杂性(Big-O符号)更多
对于运行时性能而言,比语言的选择重要.如果你
可以用o(n log n),o(n)或o(1)替换O(n*n)
可以这样做. C中实现的O(n*n)算法永远不会
优先于用Python编写的O(n)算法.唯一一次
c优于python是n很大的时候,但这也是
o(n*n)最痛苦.注意算法是事物
跑步缓慢.
Python具有高度调谐的数据类型,例如列表,dicts和sets,
C程序员将很难复制.这也适用于
内置算法,例如"蒂姆索尔". C标准库中的QSORT或
C编程器可以在合理的时间内鞭打
根本没有比较. C vs. Python基准不采用此基准
考虑到python会错误 不好.
# 回答10


Vicent Giner写道:
您肯定应该看看Sage:http://www.sagemath.org/
基于Python集成了很多
其他程序!
jaap
# 回答11


Henrique Dante de almeida aécrit:
(剪)
(剪)
(剪)
略微ot(即:不谈论计算重量的阿洛吉氏症
在C中更好地实现然后包裹在Python中 - 这似乎很
显而易见),但只是几个事实:
1/被解释或编译(无论这些定义如何
术语)不是语言的属性,而是
语言的实施.
2/实际上,所有已知的Python实现都编译为字节代码.
# 回答12


Vicent Giner aécrit:
请参阅我对您的回答和Henrique.
然后使用它.
这是一个问题?我以为你的论文是关于
算法,而不是实施优化?如果是
稍后,甚至C有时甚至可能太高 - 您应该掉落
用于组装语言.
我不能说,但是您会对可用python的数量感到惊讶
libs.
不知道这是否回答了您的问题,但似乎至少
一些作者认为这是一个不错的选择:http://www.oreilly.com/catalog/9780596529321/
本书中的所有代码示例都在python中 - 写得很差
python,a ...
下摆...显然,这里的大多数人会有一点偏见,你知道吗? - )
# 回答13


Bruno Desthuilliers写道:
出于好奇心,您的"实际上"在法国意义上是"目前"
还是从英语意义上说,"与之前说的东西相反"?还是两者都?
tjg
# 回答14


蒂姆·戈尔登(Tim Golden A):
出于好奇心,您的"实际上"是从法语意义上说的,"
时刻"或从英语意义上讲",与所述的事物相反
较早?
我主要意图从英语意义上理解它 - 但是
法语方式也可以.
# 回答15


Bruno Desthuilliers Schreef:
您一直在说这一点,从理论上讲,您是对的.但是我仍然倾向于
不同意它,因为实际现实是不同的. Python是
确实已编译为字节代码,但是如果您将该字节代码与
装配代码您会发现有一个差异的世界
在两者之间,很大程度上是由于Python的动力学性质.事实
是从一开始就设计了Python,以在虚拟机上运行,
不在本机硬件上.
C otoh被设计为编译为组装代码(或直接
机器代码),结果没有(或实际上)没有
解释C或将其编译为字节码的实现.
我爱python,但恕我直言,坚持这一事实有点愚蠢
Python编译到字节代码而不是汇编代码/机器代码为
纯粹是实施问题;相反,我相信这是
其设计的结果.我也认为有很大的差异
在字节代码和机器代码之间(在Python中 案件;我没看
在其他语言上),试图琐碎的是有点愚蠢
区别.
- -
现在生活中最可悲的方面是科学收集知识
比社会更快地聚集了智慧.
- 艾萨克·阿西莫夫(Isaac Asimov)
Roel Schroeven
# 回答16


Roel Schroeven写道:
您一直在说这一点,从理论上讲,您是对的.但是我仍然倾向于
不同意它,因为实际现实是不同的. Python是
确实已编译为字节代码,但是如果您将该字节代码与
装配代码您会发现有一个差异的世界
在两者之间,很大程度上是由于Python的动力学性质.事实
是从一开始就设计了Python,以在虚拟机上运行,
不在本机硬件上.
C otoh被设计为编译为组装代码(或直接
机器代码),结果没有(或实际上)没有
解释C或将其编译为字节码的实现.
我爱python,但恕我直言,坚持这一事实有点愚蠢
Python编译到字节代码而不是汇编代码/机器代码为
纯粹是实施问题;相反,我相信这是
其设计的结果.我也认为有很大的差异
在字节代码和机器代码之间(在Python的情况下;我没有看
在其他语言上),试图琐碎的是有点愚蠢
区别.
我强烈不同意.查看已编译为字节码的Java
*明确*,JET JVM-BYTECODE比C ++更接近Python
编译为.但是然后,有可能有带来的JIT编译器
机器代码回到图片中.
并将Python + Psyco视为JIT.
OTOH请参阅Objective-C,并且是一个示例的运行时间
机器代码编译的语言仍然具有巨大的动态运行时零件.
所有这些都极大地模糊了图像,并提出了布鲁诺的观点:汇编是一个
文物,不是语言的固有属性.
diez
# 回答17


5月19日,6:52*AM,Bruno Desthuilliers 42.desthuilli ...@werfeburburo.invalidwrote:
(剪)
(剪)
(剪)
略微ot(即:不谈论计算重量的阿洛吉氏症
在C中更好地实现然后包裹在Python中 - 这似乎很
显而易见),但只是几个事实:
1/被解释或编译(无论这些定义如何
术语)不是语言的属性,而是
语言的实施.
2/实际上,所有已知的Python实现都编译为字节代码.
是的,我实际上是指静态打字的JIT编译
语言.抱歉,怪我进入我的消化的啤酒
那天晚上的系统. :p
# 回答18


5月19日,7:03*AM,Bruno Desthuilliers 42.desthuilli ...@werfeburburo.invalidwrote:
请参阅我对您的回答和Henrique.
然后使用它.
这是一个问题?我以为你的论文是关于
算法,而不是实施优化?如果是
后来,甚至C有时甚至可能太高 - 你应该掉下来
用于组装语言.
我不能说,但是您会对可用python的数量感到惊讶
libs.
不知道这是否回答了您的问题,但似乎至少
一些作者认为这是一个不错的选择:http://www.oreilly.com/catalog/9780596529321/
本书中的所有代码示例都在python中 - 写得很差
python,a ...
下摆...显然,这里的大多数人会有一点偏见,你知道吗? - )
我同意这里大多数人所说的话,这种语言不是
真的很重要,但是这根本不适用于特定
优化研究的情况.
我对优化的了解一点,即使是微不足道的问题也可能是
毛茸茸的问题.天真的实现根本没有完成,
性能瓶颈不一定在数字计算中
算法(因此,Numpy在这里无济于事).如果那个家伙在做
对此进行研究,他可能会与成千上万的(或
数百万)怪异的约束.
我对此很确定:算法需要4个小时进行测试
单个执行,您重视处理器时间.
如果有众所周知的工具包,情况将会更简单
要在Python中进行优化(例如用于矩阵操作的Numpy),但是
事实并非如此.
# 回答19


Vicent Giner写道:
........
我在Python中编程了一些大型优化问题.我大多用
优化零件的旧数字扩展名,例如向量计算矩阵
反转等,但我认为现在使用了numpy.因为大多数工作是
在C扩展中执行,我们并没有真正注意到Python's的" Slowness"
口译员.
- -
罗宾·贝克尔
# 回答20


5月19日,下午6:11,Henrique Dante de Almeida
写道:
是的,当然,但这应该意味着我必须做得更好
编程步骤(我必须重新编程或重新实现我的
算法).我认为问题在其他任何人中都会相同
语言,不是吗?
其他语言中是否有这样的工具包?我不确定它们存在
例如,在C中.
顺便说一句,可以(易于)从A调用C函数
Python程序??
# 回答21


在文章<******************@newsfe14.ams2>中
roel schroeven 您一直在说这一点,从理论上讲,您是对的.但是我仍然倾向于
不同意它,因为实际现实是不同的. Python是
确实已编译为字节代码,但是如果您将该字节代码与
装配代码您会发现有一个差异的世界
在两者之间,很大程度上是由于Python的动力学性质.事实
是从一开始就设计了Python,以在虚拟机上运行,
不在本机硬件上.
C otoh被设计为编译为组装代码(或直接
机器代码),结果没有(或实际上)没有
解释C或将其编译为字节码的实现.

但是这个C/C ++解释器怎么样. Dobbs博士文章:http://www.ddj.com/cpp/1 84402054.标题和前两个段落:
CH:脚本计算的C/C ++解释器
C中的交互式计算
CH是一个完整的C解释器,支持所有语言功能和
ISO C90标准的标准库,但扩展了C
高级功能,例如字符串类型和计算阵列
一流对象.
对于某些任务,C及其编译/链接/执行/调试过程不是
生产力.随着计算机硬件变得更便宜,更快,
生产性和成本效益,C/C ++中的脚本计算可以是
吸引人的解决方案.为此,我们开发了CH,可嵌入
C/C ++解释器,用于跨平台脚本,外壳编程,2D/3D
绘制,数值计算和嵌入式脚本[1].
- -
-Lou Pecora

# 回答22


在19 Mai,15:30,Roel Schroeven
写道:
您一直在说这一点,从理论上讲,您是对的.
"理论上" ???哎呀,上面的两个点都是事实.好吧,我可能
接受第二个是有点过分笼统的,因为IIRC有
pypy中的JavaScript"编译器"的实验性Python,但是...
您是说源代码如何用一种语言编写(即:
语法 + a语法)最终成为由执行的一组指令
CPU取决于语言(我重复:语法 +语法),并且
没有将源代码变成的软件上
实际上可以由CPU执行吗?或存在一个(工作
可用的)实施Python语言,该语言不使用
中间字节代码汇编?如果最新的话,我会很高兴
如果被证明是错误的,请识别我的错误.但是在第一点,恐怕
那是事实是事实.
显然,是的 - 至少对于我到目前为止我看到的所有组装语言.
但是谁说其他人呢?
没有.事实是
1/ python(语言) *没有 *轻松设计
实施优化的本机代码编译器,并考虑到
2/ cpython(第一个和参考实现)已设计
使用字节代码 + VM方案
请注意. C旨在使其尽可能容易
将C汇编到组件或C到本机二进制代码编译器.
至少有一个(可能不完整的)C解释器. fwiw,它
编写字节代码+VM不会更难(也可能更简单)
基于c的实施比编写cpython,jython或
Ironpython.关键是它只是没有用的 - C是(非常)低 -
级别的语言,使用C的唯一原因是您会找到一个
几乎所有平台上都很好地优化本机代码编译器 -
有时甚至在CPU物理存在之前.
我们在这里和这里都看到了一个非常幼稚的信念,这就是
"如果将python汇编成本地代码,则会更快".这
重点是,鉴于Python(作为一种语言)极端活力,
将其汇编为本地代码不会在原始代码上买太多
表演.问题不是编写本机代码
编译器[1 },但写作 *优化 *本机代码编译器.
fwiw,即使是带有脑死亡的静态类型系统的Java也获得了更多
从VM中的JIT汇编而不是直接编译到
本地代码.
[1]并不是说我可以在合理的情况下做到这一点
时间的时间,但是考虑到有多少才华横溢的程序员和
仍在努力使尽可能快地进行Python实施,
显然,如果有这样的事情已经存在
任何工作要做.
不 ?真的吗 ?现在 *这是一个勺子,你知道吗?
我不是要"琐碎"任何东西.我只是厌倦了
这种" python是一种解释,因此是缓慢的语言"
感觉. python是一种语言,因此既不是慢速也不快,也不是
解释或编译或<插入任何相关的内容
在这里>.虽然Cpython并没有快速迅速计算
东西,不是因为它是"解释"的,而是不是因为
严格对"解释"的定义,但是无论如何... - 但是因为
*优化*高度动态语言的执行是什么,
好吧,错误,微不足道.
# 回答23


在19号,18:11,Henrique Dante de Almeida 我同意这里大多数人所说的话,这种语言不是
真的很重要,但是这根本不适用于特定
优化研究的情况.
我对优化的了解一点,即使是微不足道的问题也可能是
毛茸茸的问题.天真的实现根本没有完成,
性能瓶颈不一定在数字计算中
算法(因此,Numpy在这里无济于事).如果那个家伙在做
对此进行研究,他可能会与成千上万的(或
数百万)怪异的约束.
我对此很确定:算法需要4个小时进行测试
单个执行,您重视处理器时间.
我在这里不是专家,但这听起来对我来说是一个明智的论点.
otho,如果OP最终花费更多的时间编写样板代码
并与血腥的实施细节作斗争,而不是研究
算法本身,他可能会发现比相对差异
两种可能的算法(就像一个需要4个小时,第二个小时2
1/2小时,但每个小时不到一个小时才能实施)更多
重要比让第一个花费4分钟,第二个2 1/2
分钟,每个人都需要15天的时间来写作和调试...
至少有psyco(如果您愿意并且能够限制
您自己使用Python的一些最动态的部分 -
这里可能不是问题).还可以提及诸如Pyrex之类的东西
和Cython.
# 回答24


在19号,20:07上,Vicent Giner (剪)
其他语言中是否有这样的工具包?我不确定它们存在
例如,在C中.
好吧...他们这样做 - 他们被称为" C编译器"! - )
提到 - 他至少在这一点上是部分正确的 - c有
被设计为 KE优化C编译器不毛茸茸.
是的,确实是.轻松取决于您对轻松性的定义,
但是下到C进行计算高度至关重要的零件
程序或图书馆的内容并不少见.
# 回答25


在19号,17:53上,Henrique Dante de Almeida (剪)
啤酒中的啤酒:
如果beer.entered_henrique_digestive_system_last_night:
beer.blame()
! - )
# 回答26


5月19日,3:07*PM,Vicent Giner 这个想法是同一程序的C版本可以采用. 0,4
小时.但是我认为我们在这里有权威的答案,请参阅罗宾
贝克尔的帖子(即使他对问题进行了编程,而不是
算法). :-)
我敢肯定有很多用于线性编程的工具包(不能
告诉其他求解器). GLPK是GNU实施.它甚至有
它自己的内置语言(MathProg).有人张贴了一个有趣的
Python包装器的链接:" OpenOpt" http://scipy.org/scipy/scikits/wiki/openopt
它支持许多求解器.这对您来说可能很有趣,因为那里
是一些非线性和"全局"问题解决者:http://scipy.org/scipy/scikits/wiki/ooclasses
是的.我知道的最简单方法是使用swig.人们会推荐的
你也是凯森.
# 回答27


5月19日,5:25*pm," bruno.desthuilli ...@gmail.com"
您可能(现在很容易,没有实验软件)编译C
例如,例如LLVM字节码,在VM中解释它
它,本地编译等等.也有实验支持
将C汇编为JVM.
请注意,您通常想优化C代码,因此很难
而不是撰写python的口译员.
这不是没有用的.考虑您可以分发C申请
在字节代码而不是本机代码和安装过程中
过程,它是本机对您的汇编和优化
架构(就像更好的" Gentoo",汇编拆分
在您和用户之间).
那就是pypy人的工作.他们到了那里.他们使用
python子集,称为rpython:http://morepypy.blogspot.com/2008/01...er-than-c.html
(注意:网站中的测试比较垃圾收集速度)
顺便说一句,这是将rpython汇编为(优化)本机代码的方法:http://codespeak.net/pypy/dist/pypy/...one-howto.howto.html
这是谈论所有内容的文档:http://codespeak.net/pypy/dist/pypy/...anslation.html
很抱歉创建所有这些外部帖子.我很as愧: -
(.嗯,不是真的.:p
我的建议是使用适合优化的代码(不是
考虑您需要担心写作方式的事情
代码,例如rpython或psyco).就这样. :-)
# 回答28


5月19日,5:35*pm," bruno.desthuilli ...@gmail.com"
至少有psyco(如果您愿意并且能够限制
您自己使用Python的一些最动态的部分 -
这里可能不是问题). *一个库尔 d还提到诸如pyrex之类的东西
和Cython.
我的意思是用于"优化问题"的工具包,而不是"代码"
优化".
# 回答29


5月19日,5:46*pm," bruno.desthuilli ...@gmail.com"
啤酒中的啤酒:
*如果beer.entered_henrique_digestive_system_last_night:
* * beer.blame()
! - )
???
啤酒 += [beer.random()]
# 回答30


Henrique Dante de almeida aécrit:
至少有psyco(如果您愿意并且能够限制自己使用Python最动态的部分 - 这可能不是问题).人们还可以提及诸如Pyrexand Cython之类的东西.

我的意思是用于"优化问题"的工具包,而不是"代码"
优化".
哎呀,对不起.

# 回答31


在2008年5月19日星期一08:53:11 -0700,亨里克·但丁·德·阿尔梅达(Henrique Dante de Almeida)写道:(狙击)
(剪)
(剪)
略微ot(即:不谈论在C中实现的计算重量的Alorgithm,然后用Python包裹 - 这似乎很有趣),而只是几个事实:1/被解释或编译(无论是什么定义)不是一个属性)语言,但是语言动画的属性.2/实际上,所有已知的Python实现都编译为字节代码.

是的,我实际上是指静态打字的JIT编译
语言.抱歉,怪我进入我的消化的啤酒
那天晚上的系统. :p
[啤酒中的啤酒beer.blame()]
如果Len(啤酒)2:
news_reader.stop_working()
:-)

# 回答32


Vicent Giner在2008年5月19日星期一11:07:06 -0700写道:
[...]
是的. http://groups.google.com/group/compphe47913a265c348a
- 伊万
# 回答33


Vicent Giner写道:
这取决于.运行时间并不重要,直到您被要求扩展到
数百万或数十亿个用户或计算或大数据集.我有
看到了第一手.在同一天或更早地获得结果
重要的.在这样的情况下,我使用C或C ++ ...
做.没有其他东西会尽快.虽然我总是保留PY版本
用于测试和较小的任务.不要误会我的意思,我爱Python,
但是有时候什么都没有,但是纯净的速度会做到.
# 回答34


roel schroeven 您是否考虑过Microsoft的C/C ++编译器针对.NET的目标.那
编译到称为MSIL的字节码,然后解释和/或JIT
编译为机器代码.
然后是针对.NET的Ironpython.该编译到
字节码称为MSIL,然后将其解释和/或JIT编译为
机器代码.
- -
Duncan Booth http://kupuguy.blogspot.com
# 回答35


brad 这取决于.运行时间并不重要,直到您被要求扩展
对于数百万或数十亿个用户或计算或大数据
套.我已经看到了这第一手.在同一天获得结果或
早日可能很重要.在这样的情况下,我使用C或
C ++ ...别无其他.没有其他东西会尽快.虽然我
一个 Lways保留PY版本进行测试和较小
任务.不要误会我的意思,我爱Python,但是有时
什么都没有,但是纯净的速度会做到.
当然.请注意不要过量服用.
- -
Arnaud
# 回答36


5月19日,晚上8:07,Vicent Giner 是的.您可以例如为此使用CTYPE.
# 回答37


5月19日,晚上10:42," bruno.desthuilli ...@gmail.com"
事实证明,C非常难以优化,特别是因为指针
混叠可防止有效的寄存器分配.
Fortran的设计易于优化.不多年
以前,Fortran代码的运行速度是
等效的C. C编译器最近在差距上封闭了
变得非常擅长于他们的工作.但这不是因为C是
易于优化.相反.
对于严重的数字,没有什么比
即使在今天. F2PY使调用Fortran子例程变得容易
来自Python.
# 回答38


在2008-05-20,Ivan Illarionov 是的. http://groups.google.com/group/compphe47913a265c348a
更容易:http://docs.python.org/lib/module-ctypes.html
- -
格兰特·爱德华兹·格兰特·尤!我想要一些垃圾
在食物...然后我想
visi.com一个人 -
# 回答39


5月20日,晚上7:24,Grant Edwards 另外,请参见Cython(如果您喜欢原件,请参见Pyrex).与Cython It
很容易称呼C函数,但Cython还减轻了对C的需求
在很大程度上. Cython比C + CTYPE的优点是
当然,Python的可读性和内置的Python的存在
像字符串,dict和列表这样的类型.不幸的是,它仍然有点
很难与Cython或Pyrex一起使用Numpy Ndarrays. numpy ndarrays
不过,与CTYPES合作非常好. http://www.cython.org/
# 回答40


哇,这产生的反应远远超出了我的预期... brthedeyde hydedodeyde*****@gmail.com schreef:
您一直在说这一点,从理论上讲,您是对的.

"理论上" ???哎呀,上面的两个点都是事实.好吧,我可能
接受第二个是有点过分笼统的,因为IIRC有
pypy中的JavaScript"编译器"的实验性Python,但是...
您是说源代码如何用一种语言编写(即:
语法 + a语法)最终成为由执行的一组指令
CPU取决于语言(我重复:语法 +语法),并且
没有将源代码变成的软件上
实际上可以由CPU执行吗?
不,那不是我说的;我说的是一些语言
在脑后设计了他们要去的想法
被汇编为本地代码,其他要解释的,而其他人则为
编译为字节代码.
Wikipedia谈到C时说:"它的设计目标是要编译的
使用相对简单的Forwar D编译器,提供低级访问
内存,提供有效映射到机器的语言构造
指示,需要最少的运行时间支持".对我来说,
强烈建议将其汇编成本地代码.它是
由于某种原因称为"便携式组件".您 *可以 *使它起作用
另一种方式,我想它已经 *完成了,但是这些实现
在少数群体中很远.
至于Python,直到我知道所有实现PYPY的出现
虚拟机(Cpython,Jython,Ironpython).和pypy仍然
据我所知.
因此,是的,转换方法从源代码到某些东西
CPU理解取决于您的工具.但是,如果您想完成工作,
到目前为止,最常见的方法是使用编译的工具链
到本机代码和Python A BYTE代码编译器 +虚拟机.
可能是JIT编译器,这是事实.
显然,是的 - 至少对于我到目前为止我看到的所有组装语言.
但是谁说其他人呢?
每当有人说Python被解释时,您都会回答说
那是不正确的,因为它已编译为字节代码.正确
当然,但是在我看来,您暗示这使得
python更接近类似于C的语言,而不是一种解释的语言,并且
那是不正确的(IMO).如果这只是我的误解,我
道歉.
没有.事实是
1/ python(语言) *没有 *轻松设计
实施优化的本机代码编译器,并考虑到
2/ cpython(第一个和参考实现)已设计
使用字节代码 + VM方案
这不是我所说的或多或少相同吗?
也许我没有在语言和
CPYTHON实施,但是Python的开发确实发生在
CPYTHON实施(Python 3.0 Alpha版本是Cpython版本,
例如).
请注意. C旨在使其尽可能容易
将C汇编到组件或C到本机二进制代码编译器.
我发现很难相信在C Dennis的发展过程中
Ritchie正在考虑采取任何其他操作模式
组件或机器代码.我当然可能错了.
至少有一个(可能不完整的)C解释器.
我想称之为确认规则的例外.
我承认我对这种信念有罪.我知道你说的是真的,但是我
确实有或无意识的反射'编译为本地代码
==快速'.
因此,您是说Cpython相对较慢,因为Python是一个
高度动态的语言.我知道Cpython不是Python,Python是
不是cpython,但两者之间有着非常紧密的关联
因此,我认为将其简化为
'python很慢,因为它是一种高度动态的语言(直到被证明
pypy或其他快速实施的错误.
- -
现在生活中最可悲的方面是科学收集知识
faste r比社会聚集了智慧.
- 艾萨克·阿西莫夫(Isaac Asimov)
Roel Schroeven

# 回答41


在文章
YouTube?
- -
aahz(aaxpythoncraft.com)<*http://www.pythoncraft.com/
需要书吗?使用您的图书馆!
# 回答42


5月20日,下午3:37,brad 正确的.告诉福特兰社区.顺便说一句:http://latticeqcd.blogspot.com/2006/...nd-python.html(_@_ _)
在18 Mai,00:32上,Vicent Giner 如果Python在生产系统执行速度中不运行
很重要. *开发 *非平凡的Algos时,实际上重要的是
是要分区数据流,因为可能需要很长时间才能到达
当前感兴趣的某个执行点 - 它必须
反复到达.对于每种方法,一个人可能想要工作
带有预计的数据,这些数据已在以前的运行中序列化.给出
Pythons的灵活性这将很容易,所以!组合
物体腌制/未挑剔和使用装饰器的方法使它成为一种快照.
只需查看以下简单的装饰器:
def dump_data(func):
def呼叫(*args,** kwd):
res = func(*args,** kwd)
fl = open(" dump_data.pkl"," w")
pickle.pickler(fl,0).dump(args [0])
返回res
呼叫.__名称__ = func .__名称__
致电.__ doc__ = func .__ doc__
返回电话
和相应的加载程序:
def load_obj():
f = open(" dump_data.pkl")
返回pickle.unpickler(f).load()
一个人可能会用dump_data和
恢复对物体的活动,在另一个foo被调用后
通过使用load_obj还原对象来运行.
一个人可以通过在测试驱动器序列化时进一步改善这一点
作为生成器实现.虽然这是非标准的,并且需要
我自己的或无stack python [2]的一些工作也是如此.
我打算清楚的是,Python有很多东西
工具箱除了具有很多绑定和可读性的绑定外(
通常的嫌疑人在此类线程中提倡时.
[1] http://www.fiber-pace.de/generator_...tor_tools.html
[2] http://www.stackless.com/
# 回答43


5月19日,晚上8:09,Lou Pecora 但是这个C/C ++解释器怎么样. Dobbs博士文章:http://www.ddj.com/cpp/184402054.标题和前两个段落:
CH:脚本计算的C/C ++解释器
C中的交互式计算
CH是一个完整的C解释器,支持所有语言功能和
ISO C90标准的标准库,但扩展了C
高级功能,例如字符串类型和计算阵列
一流对象.
如果您仍然最终追逐指针来实施您的数据结构
然后它仍然受到阻碍.
# 回答44


5月17日,晚上11:32,Vicent Giner 使用Python并不意味着您放弃C!许多最好的
用其他语言(例如C,C ++和Fortran)编写的算法是
wra前 PPED在Python中或可以包裹在Python界面中
提高可用性,而不必支付MATLAB型价格.然后是你
通过降低成本到
其他研究人员.
Python是一种脚本语言.尽管有些人可能会想到什么
恩赐,因为这意味着Pythons设计师重视其工作能力
与其他语言和系统息息相关.
没有什么可以阻止您探索python中的算法空间
用更接近汇编程序的语言实施 - 这很可能是
实现目标的方法越快.
- 帕迪.
# 回答45


Roel Schroeven A©crit:
"理论上" ???哎呀,上面的两个点都是事实.好吧,我可能会认为第二个是有点过度的,因为iirc在pypy中有实验性的python到javascript"编译器",但是...您的意思是,您的意思是用语言编写的源代码(即:agrammar + a语法)最终成为由CPU执行的一组指令,取决于语言(我重复:语法 + A语法),and没有在一块软件上将源代码转换为CPU实际上可以执行的内容?

不,那不是我说的;我说的是一些语言
在脑后设计了他们要去的想法
被汇编为本地代码,其他要解释的,而其他人则为
编译为字节代码.
我会简单地说:有些语言是用低级设计的
访问和原始表演,有些没有.罗尔,我完全
意识到这些问题 - 当然您当然是正确的 - 但是
不会改变语言及其实施 *是 *的事实
独特的事情.
(剪)
您可以使用不同的解决方案拥有不同的工具
语.显然,是的 - 至少对于到目前为止我看到的所有集会语言.但是谁说其他人呢?

每当有人说Python被解释时,您都会回答说
那是不正确的,因为它已编译为字节代码.
每当有人说Python被解释时,我都会回答说
被插入或编译不是语言的特征,也不是
CPYTHON编译为字节代码.
这就是重点:正确.
我什么都不暗示 - 除了最终是我的人
纠正应该更好.
奇怪的是,没有人将Java或C#称为"解释的语言",而
他们(或更确切地说,他们的参考实现)都使用
相同的字节代码/VM方案[1].你知道,普遍接受
"字节代码"的定义是"将要传递给
虚拟机",而不是"本机二进制可执行代码",所以我不认为
这可能真的是误导的.
现在您似乎没有得到的是纯净的
解释 - 每个陈述被解析的地方
一次又一次解释 - 中间字节代码汇编.
相信我, *这个 *可以产生巨大的差异/表演.
此外,还有很多"类似C的语言) "那是 - 在
他们唯一的或参考实施 - 解释或编译为
字节代码.为了定义"类似于c","靠近C语言的"
语法和语法"! - )
[1]哦,在一些坚果箱跳入之前:不,这并不意味着
CPYTHON VM与Sun的Java VM或MS CLI/.NET VM"等效".没有.事实是,1/ python(该语言) *没有被设计为优化的本机代码编译器的简化设计,而2/ cpython(第一个和参考实现)已设计为使用字节 + VM方案

这不是我所说的或多或少相同吗?
你不能说区别吗???请注意. C旨在使其尽可能轻松地拖入C组装或C到本机二进制代码编译器.

我发现很难相信在C Dennis的发展过程中
Ritchie正在考虑采取任何其他操作模式
组件或机器代码.我当然可能错了.
我不是在谈论"发展"(这意味着实施),而是
关于 *语言 *的设计. Roel,您可以定义"语言"吗?至少有一个(可能不完整的)C解释器.

我想称之为确认规则的例外.
哪个规则?
哦,是的 - 正如几个人指出的那样,实际上还有更多
而不是"一个(可能不完整的)C解释器" - 还有
LLVM字节代码编译器+VM和MS CLI C/C ++编译器.
我承认我对这种信念有罪.我知道你说的是真的,但是我
确实有更多或无意识的反射'编译到本地代码==
快速地'.
因此,进行一个简单的测试:在C中写一个非常Q&D猫的程序
和perl,并基于三个实现.结果可能
惊讶你.
因此,您是说Cpython相对较慢,因为Python是一个
高度动态的语言.
因此很难优化.
的确. Cpython是Python的参考实现.像GCC一样
在Linux平台上C的参考实现. ETC...
这绝对是错误的. *语言 *如何"慢"或"快速"?
您知道,常见的LISP也是一种高度动态的语言,并且有
现在,一些优化的本机代码通用LISP编译器生成非常非常
有效的二进制代码.它只花了大约30年的时间
比Cpython必须到达那里的烦恼...

# 回答46


Sturlamen aécrit:
事实证明,C非常难以优化,特别是因为指针
混叠可防止有效的寄存器分配.
这与优化python之类的东西相比吗? (严肃的
问题,但我认为我已经知道答案的一部分).
# 回答47


使用swig.这很容易,聪明和美丽.之后,您可以致电C/C+
+来自许多脚本语言,例如Python,R等
许多开源项目已经使用. http://www.swig.org/tutorial.html
boost.python也是非常著名的(但我从未经过我的测试).
frédéric

标签: python

添加新评论