close

翻譯社價位比來開始用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有關翻譯的問題歡迎諮詢華頓翻譯社

arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 adamr511523d3 的頭像
    adamr511523d3

    adamr511523d3@outlook.com

    adamr511523d3 發表在 痞客邦 留言(0) 人氣()