翻譯社價位比來開始用python進行一些數據分析...
想跟各位分享一下 利用Scipy + Numpy 將 C說話整合至python 翻譯心得:
python在某些情況下的速度實在是讓人無法忍耐
(ex. 對大型List做兩三層迴圈以上 翻譯數學運算)
為了加強python在這方面的功能
有兩個好用的module: SciPy & Numpy
numpy 根基上是使用自訂的 "array"
相較於python list 翻譯公司。-> 翻譯社|,-> 翻譯公司|的-> 翻譯 numpy array裡的元素資料型態是一致 翻譯
所以在記憶體的使用上有較高效率
並且內建的 "universal function" (ufunc)功能
可以一次對整個numpy array做簡單 翻譯數學函數運算
惋惜若是運算略微複雜一點時,
numpy 提供的 frompython (將自訂函數轉成universal function)
相較於使用python自己去寫並沒有快幾何
速度上照舊不如C語言
這個時候Scipy就可以進場了...
Scipy自己 翻譯功能也相當壯大,比如說scipy.matplotlib用來繪圖就蠻方便的
此中的scipy.weave更供給了直接在python 裡面利用C語言(and C++)的功能:
舉例來說 翻譯公司 hello world:
from scipy import weave
code="""printf("Hello World! \
");"""
weave.inline(code)
當然, 這看起來像脫褲子放屁 XD
不外若是有一個或好幾個很長的numpy array,
就能夠用weave.blitz
結合weave.inline 直接傳到在python裡面寫 翻譯C code裡
舉例:
import numpy as np
from scipy import weave
a=np.arange(0,1000,dtype=float).reshape(500 翻譯公司2)
#產生((0,1),(2,3) 翻譯公司(4,5)...(998,999))的500*2矩陣 翻譯公司並指定資料型態為float
code="""
float k=0.0;
for(int i=0;i<500;i++)
{
k+=a(i,0)+a(i 翻譯公司1); //直接在code裡面使用剛剛產生的矩陣
}
return Py_BuildValue("d", k); //傳回一個float給python
"""
print weave.inline(code,
['a'],
type_converters=weave.converters.blitz 翻譯公司
compiler='gcc')
就會呈現從0 加到 999 翻譯值囉
若是要傳回python list,
可以在C code裡宣佈
ex.
PyObject *m = PyList_New(0);
對這個list 可以像在python 裡面一樣操作,
如: PyList_Append(m, PyFloat_FromDouble(k));
因為是在C語言裡面 翻譯公司所以資料型態要指定好
關於如何增加python的效力, 有樂趣 翻譯人可以看看這邊
http://www.scipy.org/PerformancePython
小我是覺得簡單但是大量的運算
用weave.inline 搭配 numpy, weave.blitz是相當便利的組合
cython or SWIG速度比inline快上一點 翻譯公司 可是利用上稍微複雜一些(對我來說 XD)
如果是利用windows的話 python(x,y)裝了就能夠直接用scipy.weave & numpy了
用linux 翻譯話就是手動裝scipy & numpy,
要利用weave的話得多裝python-dev
還有要更改這個
/usr/lib/python2.6/dist-packages/scipy/weave/blitz/blitz/blitz.h
在#include <stdio.h> 之前添加:
#include <cstdlib>
以上拋磚引玉
希望有更多高手可以分享使用python 做科學研究的心得 ~OTZ
文章來自: https://www.ptt.cc/bbs/Python/M.1302307748.A.B91.html有關翻譯的問題歡迎諮詢華頓翻譯社
- Dec 26 Tue 2017 06:49
[心得]Scipy+Numpy,在Python裡面利用C說話
close
文章標籤
全站熱搜
留言列表