2012-03-14 84 views
1

我正在開發一個用於科學目的的C++/Qt軟件。雖然Eigen庫爲我提供了許多分析矩陣的操作,但爲所有可能的操作連接設計gui仍然很痛苦/很難。因此我也在運行時用Matlab交換矩陣。由於Matlab不是開源的,我的大學學生很難獲得,我想用python做同樣的事情,所以我可以使用例如SciPy進行分析。因此,我的問題:我如何與python交換數據(例如稀疏矩陣),特別是在運行時scipy?C++應用程序(Sci)之間的數據交換Python

請注意,我可能會考慮這種錯誤/複雜的方式,所以我對其他解決方案開放以解決我的問題。我試過PythonQt最終運行我的整個應用程序在Python中,但它並沒有與Qt4.8工作,但它仍然意味着很多工作,使其他部分可由python調用。我們現在正在使用QScript,正如預期的那樣,它不提供任何數據分析工具。

+0

你可以舉一個或兩個「交換矩陣」?說cA cB ...在C端(格式是什麼?),sC sD ...在scipy端,並且你想cA cB - >一些scipy func - > sD - >回到cD的矩陣? – denis 2012-03-14 10:09:10

+0

@Denis準確無誤。我的C++代碼將生成一些矩陣,例如std :: vector ,我想在SciPi中分析的Eigen稠密和稀疏矩陣,例如,計算條件數字,並將一些結果發送回C++。 – 2012-03-14 10:16:01

+0

也許這取決於您實際使用的Eigen庫的哪些部分,但對整個項目使用Sage(http://www.sagemath.org/)怎麼辦? – Masci 2012-03-14 11:32:51

回答

0

不是一個答案,但一對夫婦更見地地問:

1)問cython mailing list (你知道cython在所有 傳遞正常密集numpy的陣列到C,並在填補呢? C,很容易; 你可以預先分配一個足夠大的numpy的陣列,您的作業)

2)scikit-learn 負荷稀疏陣列中的數據文件→ scipy.sparse陣列?

+0

感謝您的建議。我會看一下。 (請參閱我對rdchambers的回覆) – 2012-03-15 16:22:27

0

Cython(它似乎是Sage的一個分支)是一種將Python和C/C++粘合在一起的流行方式。在我有限的經驗,它是非常優雅和有效的。

他們有一個很好的tutorial on working with Numpy arrays(這幾乎可以肯定你應該如何在Python中表示數組)。當然,Numpy/Scipy提供了許多與Matlab相同的數字。

+0

感謝您的建議。乍一看,它似乎是一種從python中調用我的C++代碼的方式,而我更願意在運行時將python控制檯與我的C++應用程序連接起來。不過,我會更深入地研究Cython,看看我能否找到解決方案。 – 2012-03-15 16:21:19

+0

「將python控制檯與我的C++連接」:爲什麼不使用管道,請參閱[subprocess](http://docs.python.org/library/subprocess.html).Popen和numpy [fromfile](http:/ /docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html)/ tofile?或者在例如問一個新問題「python <-> C over pipes」。 – denis 2012-03-15 17:52:14

相關問題