1
kfll 2013-05-19 05:37:11 +08:00 1
后端一般都是MP/MPI+C和Fortran
前端看到的多数是Python... PS: CADD领域 |
2
y 2013-05-19 06:16:44 +08:00 1
估计还是 Matlab 处理矩阵运算厉害些。
代数相关的领域,用 SAGE 的人很多,这个完全是基于 Python 的, 可能有些关键部分用 C 优化过。 |
4
cassyfar OP @y matlab对于循环处理太慢...
下了个SAGE看了下,他的优势是不是在于built-in functions?感觉性质和matlab等数学辅助工具一样吧 |
5
chemhack 2013-05-19 07:03:55 +08:00 1
做machine learning如果你数据量大的话,也不需要并行计算,一般的瓶颈在磁盘IO。CPU密集型的计算python跟c有数量级的差距。
@kfll 在超算上跑python被人嘲笑的感觉就跟买了个mbp retina装了个windows XP一样,还是电脑城装机版的。PS,simulation领域 |
6
cassyfar OP @chemhack python性能差距这么大... 想使用python的初衷是看到Python上有scipy和matplotlib,以为处理跑出来的数据会方便不少
现在磁盘IO应该还没到 也是单thread在跑 主要是循环的周期太长 用Matlab一个周期要1小时多... |
8
xiaoxuxu 2013-05-19 13:49:04 +08:00 1
numpy/scipy底层都是纯C的,性能不会比matlab差。scikit-learn, genism等都是建立在numpy/scipy之上。python只是提供了一个胶水层。另外纯python部分也可以再用pypy jit一下,性能相当可观
|
9
xiaochong 2013-05-19 14:43:15 +08:00 1
不论性能,对于代码表达而言,numpy中主要类型是多维数组(可高于二维),matlab的主要类型是矩阵(二维,更加符合线性代数的表达),之前多用matlab,个人感觉matlab的表达更直接一些。
个人认为,python的优点在于其是免费的(octave http://www.gnu.org/software/octave/ 算是免费的matlab),而且与matlab的差距不大,因此越来越流行。 |
10
luikore 2013-05-19 14:47:00 +08:00 1
scipy足够快了,不够快的自己把瓶颈处算法改改,比换语言更有效
|
11
chichan 2013-05-19 16:37:36 +08:00 1
非常大,但是你可以用 numpy/scipy 获得优异的性能来解决这个问题,另外 numpy/scipy+matplotlib 的组合不输给 matlab,在很多地方上甚至超过它
|
12
Ranler 2013-05-19 21:02:46 +08:00 1
之前模式识别的课程实验就用Sage(http://www.sagemath.org/)做的。。。
总体来说Sage不如matlab方便,比较小众,文档肯定也没matlab全。 性能还可以,如果不够的化可以再用的IntelCC重新编译numpy模块来实现CPU指令级(扩展指令集)的矩阵运算加速。 但是想锻炼自己的编程能力,可以上Python。如果只是做研究,直接matlab把。 |
13
empilot 2013-05-19 22:13:49 +08:00 1
MATLAB是一种解释性语言,所以在运行效率上不如C,特别是在有循环的地方。
因为我曾经用matlab做过多重循环的算法,确实很慢。 于是,我看了这篇文章:http://web.cecs.pdx.edu/~gerry/MATLAB/programming/performance.html 主要是从三方面入手: - Using vector operations instead of loops - Pre-allocating memory for vectors and matrices - Correct code is most important 后来,我将原本一段耗时约500秒运行的matlab程序,用C编译后再运行,结果变快了10秒。 下面是我本科时“小打小闹”的一篇相关文章: http://em-pilot.appspot.com/2010/05/27/ImprovingMatlabCalculations.html 以上仅供参考,不知道是否有用... |
14
Ricepig 2013-05-19 23:50:13 +08:00 1
@empilot 是的,使用MatLab仍旧偏向循环处理每一条数据,那就好比在数据库中放弃了sql语句而使用cursor来计算数据。建议是在更粗粒度上进行处理。
|
16
sectic 2013-05-20 01:11:35 +08:00 via iPhone 1
大,很大,前段时间做图像,还有一些相关的计算,算了一下,c比python快很多很多。
而且论文的话,一般要求是c和 matlab。 |
17
sectic 2013-05-20 01:13:49 +08:00 via iPhone
矩阵的话,只是计算的话用一个单列list就够用了。numpy的变换完接下来不好做。
|
18
yyai3 2013-05-20 09:14:22 +08:00
正要学习scikit-learn 有什么好的建议么?
|
19
ruoran 2013-05-20 09:41:13 +08:00 1
我感觉numpy scipy matplotlib 的组合是强于matlab的。python性能肯定不如c,所以实在追求性能可以用c写一部分性能需求高的,然后用python调用吧。
FYI,https://news.ycombinator.com/item?id=363096 |
20
empilot 2013-05-20 12:43:57 +08:00 1
Python 在这方面的应用发展,从我订阅的Enthought的Newsletter来看也在不断发展中。
https://www.enthought.com/ |
21
middleware 2013-05-20 14:32:13 +08:00 1
@ruoran 说的是正解。像矩阵运算,解线性方程,FFT 这些东西无论如何都得用 C 写(或者用现成的,比如 Intel MKL)。Python 顶多写写 top-level 准备数据的胶水代码。
|
23
wizardforcel 2018-04-04 09:29:04 +08:00
NumPy 里面用了 C 的共享库。
而且 C 的代码里用了 SIMD,否则你用普通的指令还是慢。 Matlab 同理。 不过 Python 有个好处就是,你没必要用 C 来提升速度,它的一种方言 Cython 也可以。 |