2013-05-08 72 views
0

我正在解決一組耦合ODE並面臨兩個問題:速度和內存存儲。因此,我使用cython_gsl來創建一個解決我的ODE的模塊。到目前爲止,我只是將數據寫入到.txt文件中,但我認爲使用PyTables會更有用。從cython模塊中使用PyTables

因此我在.pyx文件中定義的東西像

from cython_gsl cimport * 
from tables import * 

def main (parameters for run): 

class vector(IsDescription): 
    name= StringCol(16)      # 16-character String 
    i = Int32Col()     # 32-bit integer 
    j = Int32Col()    # 32-bit integer 
    k = Int32Col()    # 32-bit integer 

h5file = tables.openFile("tutorial1.h5", mode = "r", title = "Test file") 
group = h5file.createGroup("/", 'spin_vectors',"Spin vectors of the crust and core") 
table = h5file.createTable(group, 'shellvector', vector, " ") 


... Setup the ODEs ... 

while (t < t1): 
    status = gsl_odeiv_evolve_apply (e, c, s, &sys, &t, t1, &h, y) 

    if (status != GSL_SUCCESS): 
     break 

    #write_file.write("%.16e %.16e %.16e %.16e %.16e %.16e %.16e\n" %(t, y[0], y[1],y[2],y[3], y[4],y[5])) 
     shell_table.row['i']=y[0] 
     shell_table.row['j']=y[1] 
     shell_table.row['k']=y[2] 
      shell_table.row.append() 

shell_table.flush() 

然後我用setup.py文件,該文件輸出(成功)一個.so文件進行編譯。不幸的是,導入到Ipython後,我得到了錯誤

NameError: Int32 

我認爲這是一個PyTables的事情。所以它似乎沒有被正確導入?雖然我認爲這是一個很好的方法來做到這一點,如果任何人有更好的建議,如何處理來自python/cython的數據,我會很高興聽到..谷歌幾乎沒有!

回答

1

不幸的是,這裏沒有足夠的信息能夠回答你的問題。你正在嘗試做什麼應該工作。但是,我不認爲這個錯誤來自PyTables(它沒有任何獨立的「Int32」類,儘管它有一個「Int32Atom」和「Int32Col」)。我懷疑這是來自CythonGSL。有沒有什麼方法可以讓你發佈完整的追溯 - 而不僅僅是最後一個錯誤 - 以便我們可以確定地知道?