2013-10-17 224 views
3

我希望使用Numba(http://numba.pydata.org/)加快我的機器學習算法(用Python編寫)。請注意,該算法將稀疏矩陣作爲其輸入數據。在我的純Python實現中,我使用了Scipy的csr_matrix和相關類,但顯然它與Numba的JIT編譯器不兼容。我也創建了我自己的自定義類來實現稀疏矩陣(基本上是(index,value)對列表的列表),但它又與Numba不兼容(即,我得到了一些奇怪的錯誤消息說它不識別擴展類型)Numba中的稀疏矩陣

是否有一種替代的,簡單的方法來實現稀疏矩陣只使用numpy(不訴諸於SciPy)與Numba兼容?任何示例代碼將不勝感激。謝謝!

+1

你使用了'csr_matrix'的哪些功能?你可以嘗試在numpy中重現它們的行爲,雖然我嚴重懷疑它通常會導致加速... – Jaime

+0

我只使用csr_matrix存儲我的數據。我需要的僅僅是逐行迭代,然後爲每一行我想檢索索引和值的列表。這就是爲什麼現在我創建了自己的類,實現爲一個簡單的列表清單。但是Numba的編譯器也沒有認識到這一點。 – rjo2909

回答

2

您可以訪問稀疏矩陣的數據爲純numpy或python。例如

M=sparse.csr_matrix([[1,0,0],[1,0,1],[1,1,1]]) 
ML = M.tolil() 

for d,r in enumerate(zip(ML.data,ML.rows)) 
    # d,r are lists 
    dr = np.array([d,r]) 
    print dr 

生產:

[[1] 
[0]] 
[[1 1] 
[0 2]] 
[[1 1 1] 
[0 1 2]] 

當然numba可以處理使用這些陣列代碼,提供,當然,其不期望的每一行有陣列的相同大小。