英文翻譯泰文最近起頭用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 01:23
[心得]Scipy+Numpy,在Python裡面利用C說話
close
文章標籤
全站熱搜
留言列表
發表留言