我有一個python代碼計算矩陣,我想從C代碼中使用這個矩陣(或數組,或列表)。
我想從python代碼中醃製矩陣,並從c代碼中取消它,但是我找不到有關如何執行此操作的文檔或示例。 我發現了關於編組數據的一些信息,但沒有提到從C中刪除。如何從C代碼unpickle
編輯: 評論者Peter H問我是否在使用numpy數組。答案是肯定的。
我有一個python代碼計算矩陣,我想從C代碼中使用這個矩陣(或數組,或列表)。
我想從python代碼中醃製矩陣,並從c代碼中取消它,但是我找不到有關如何執行此操作的文檔或示例。 我發現了關於編組數據的一些信息,但沒有提到從C中刪除。如何從C代碼unpickle
編輯: 評論者Peter H問我是否在使用numpy數組。答案是肯定的。
如果它只是一個矩陣,你可以把它寫成一個CSV文件。看看這個Python的csv模塊。 http://docs.python.org/library/csv.html
看看模塊struct
?
你可能想要使用更標準化的東西,比如JSON。你在Python 2.6中有一個JSON模塊。 C有6種不同的JSON模塊。
您可能想要使用更類似C的東西,如Python struct
模塊。它可以直接構建一個兼容C的對象,使您免受酸洗和拆卸的困擾。 http://docs.python.org/library/struct.html
Struct似乎更適合於編寫ioctl之類的東西,或者在內存中構建結構。編寫二進制blob並不便於調試c代碼。我想我會用csv或json去 – shodanex 2009-12-10 15:59:21
查看關於在Mark Pilgrim的Dive Into Python中序列化數據的章節。他在那裏指出:「pickle協議是Python專用的;不能保證跨語言兼容性,你可能無法獲得你剛剛創建的pickle文件,並在Perl,PHP中使用它做任何有用的事情,Java或任何其他語言。「
也許JSON是一個更好的選擇,也在該章中解釋。
如果你絕對必須使用酸洗,你可以在你的C程序中嵌入Python和通過Python unpickle的溫度。
此外JSON,也有具有爲Python,C++和Java的 '天然' 的支持(從谷歌)的Google Protocol Buffers - 和一些的第三方綁定到其他語言,包括C.
Protocol Buffers是一種有趣的方法來序列化信息也是非常緊湊和快速的(與C++相比,支持C語言並不是發佈的protobuf包的一部分,但在某些C項目中可以接受某些C++代碼的鏈接,或者在那裏可能是第三方實現,如protobuf-c - 有關其他第三方附件的列表,請參閱here)。
最佳答案可能取決於具體情況。這是一個numpy數組(如果沒有,爲什麼不呢?)。你的C代碼是否正在使用任何外部庫來處理它?你真的希望這是多麼一般?我只是將numpy數組轉換爲「raw」,並將它讀入C語言的malloc'd內存塊中,除非我有你沒有提到的特殊需求。 – 2009-12-10 16:19:05
借調彼得漢森 - 如果你使用numpy,你基本上可以免費獲得這個,不需要拆卸。 – 2009-12-10 17:33:57