Karena saya baru belajar mengenai hal ini (hari ini belajar bersama dengan yayan), maka saya akan mencoba sedikit share pengalaman bagaimana memanggil code C dari python. Mungkin bagi yang sudah terbiasa menggunakan python hal ini menjadi barang yang kecil, tapi meski begitu saya yakin masih banyak beberapa temen yang mungkin bisa mengambil manfaatnya.
1. Membuat code C sederhana.
misal code C-nya seperti ini :
#include
void hello(){
printf("hello, calling C from python is really easy (nek we ngerti rek..he he) \n");
}
kemudian code diatas bisa disimpan ke dalam file-name misalkan aja 'contoh.c'
2. Creating a shared library with the gnu compiler [gcc]
Shared libraries adalah libraries yang dipanggil oleh programs ketika mulai pertama kali. Shared library ini memungkinkan suatu object bisa di-share pada platform yang berbeda (misal python dan C). Untuk membuat 'object files' yang akan menjadi 'shared library' bisa menggunakan gcc -fPIC atau -fpic flag.
Berikut adalah contohnya (ketik di terminal linux):
Untuk memanggil shared library yang sudah dibuat diatas kita bisa menggunaka 'ctypes'.
Ctypes akan meng-export 'cdll' untuk nge-load 'dynamic link libraries'.
sebagai contoh di script di python-nya bisa ditulis sebagai berikut :
4. Kemudian panggil python-nya dengan cara berikut (pastikan anda sudah menginstall python):
enjoy...
referensi
1. http://www.adp-gmbh.ch/cpp/gcc/create_lib.html
2. http://dalkescientific.com/writings/NBN/ctypes.html
3. http://docs.python.org/library/ctypes.html
4. http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
5. http://mail.python.org/pipermail/baypiggies/2009-December/005918.html
>>> gcc -shared -fPIC contoh.c -o contoh.o3. Loading dynamic link libraries
Untuk memanggil shared library yang sudah dibuat diatas kita bisa menggunaka 'ctypes'.
Ctypes akan meng-export 'cdll' untuk nge-load 'dynamic link libraries'.
sebagai contoh di script di python-nya bisa ditulis sebagai berikut :
>>> from ctypes import *kemudian save script python dalam top.py
>>> libc = CDLL("./contoh.o")
>>> libc.hello() # hello disini pastikan sama dengan nama fungsi yang ada di code C/C++
4. Kemudian panggil python-nya dengan cara berikut (pastikan anda sudah menginstall python):
>>> python top.py
enjoy...
referensi
1. http://www.adp-gmbh.ch/cpp/gcc/create_lib.html
2. http://dalkescientific.com/writings/NBN/ctypes.html
3. http://docs.python.org/library/ctypes.html
4. http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
5. http://mail.python.org/pipermail/baypiggies/2009-December/005918.html
Mantap Fin... lalu cara memanggil fungsi matlab dari python-nya ditunggu ya!! Habis itu mix C/C++ - Matlab - Python ^^
ReplyDeleteagan agan, mungkin penggunaan octave jg perlu dipertimbangkan, selain C tentunya. Pengalaman terakhir saya pake octave updatean terbaru bisa menjalankan program saya yg notabene awalnya dirunning di MATLAB.
ReplyDeleteBtw, mantap om fifin... !
Oiya betul! Kalo bisa coba juga python panggil fungsi di C/C++ lalu plot hasilnya dengan panggil fungsi plot-nya Octave.. lebih mantap lagi itu..
ReplyDeleted---0.o---b
@adegawa : super sekali masukannya bang ade, jadi memang octave mungkin juga bisa menjadi alternatif pilihan, cuma ketika kita (lebih tepatnya teh felis sih) meng-convert dari matlab ke octave ternyata kecepatannya malah 5 kali lebih lama dibanding dengan matlab :(.
ReplyDeletemungkin teh felis bisa menambahkan ^_^
@yayan : betul agan yayan, kita juga bisa menggabungkan octave dan C dengan jembatan python
mantab artikelnya ...
ReplyDeleteyup, setuju sama fifin,
octave: kode mirip matlab (library juga lengkap), tapi waktu eksekusinya lambat
C/C++ : kode beda dari matlab, tapi waktu eksekusinya cepet
saya sempet coba jalanin kode yang dipakai sekarang di octave. setelah sedikit perubahan di sana sini (karena octave agak lebih rewel), akhirnya bisa jalan. sayangnya, waktu eksekusinya 5 kali lebih lama daripada matlab.
dari pengalaman sih, masih bisa dioptimalkan lagi. misalnya fungsi isequal() sebisa mungkin diganti ==, terus pemanggilan fungsinya dikurangi, dan mungkin masih banyak lagi caranya, tapi pastinya bakal tetep jauh lebih lambat dari C++.
supaya ada keseimbangan antara kemudahan & waktu eksekusi, sepertinya perlu cari komposisi yang pas antara octave, C++, dan integrasinya (misal python) ...
mantabs pak bos, akan segera dicoba..
ReplyDeletesepakat teh felis, perlu dicari komposisi yang pas antara octave, C++ dan integrasinya, karena saya juga pernah jalanin channel sounding di octave lama bgt..
share library C++/IT++ untuk communication,signal processing, dll: http://itpp.sourceforge.net/current/modules.html
ReplyDeleteTapi mungkin udah pada tau ya... :p
Sebagai informasi, di python kita juga bisa lakukan numerical calculation.. yaitu pakai module scipy dan numpy, bahkan python bisa nge-plot dengan plotting yang cukup complex menggunakan module matplotlib, saya sudah pernah coba dan memuaskan. (another tutorial for this python app would be appreciated ;)
ReplyDeleteCara nambahin module-nya tinggal:
sudo apt-get install python-numpy python-scipy python-matplotlib
Mengenai library DSP, di python jelas kalah jauh dari Octave/Matlab atau IT++, cuma menariknya udah ada library FFT di python ^^