使用MatLab C API和Go的Cgo package,我試圖在我的Go程序中讀取mat文件中的24x3000000矩陣。我能夠成功讀取矩陣的維數,但是如何訪問每個單元格內的值? (我們的目標是最終返回此矩陣作爲一個切片到我的圍棋程序。)如何使用Cgo訪問MATLAB數組中的值?
var realDataPtr *C.double
var field *C.mxArray
fieldName := C.CString("data")
field = C.mxGetField(pa, 0, fieldName)
rowTotal := C.mxGetM(field) // outputs 24
colTotal := C.mxGetN(field) // outputs 3000000
// get pointer to data in matrix
realDataPtr = C.mxGetPr(field)
// Print every element in the matrix
for row := 0; row < int(rowTotal); row++ {
for col := 0; col < int(colTotal); col++ {
// This is where I get stuck
}
}
僅供參考,here's在MATLAB對C
'mxGetPr'返回一個指向一個常規的C數組類型的'double'長度爲24 * 300萬,存儲在列主順序 – Amro 2014-11-02 01:48:32
你能告訴我們你在哪裏得到'field'部分?以下是從MAT文件讀取變量的示例:http://stackoverflow.com/a/26241535/97160。如果你想要的話,我可以展示另一個例子(在C中,恐怕我不知道Go),但是如果你給我們多一些上下文,陣列來自哪裏,這將有所幫助。 – Amro 2014-11-02 14:28:29
@Amro I've更新了我的代碼,以顯示我在哪裏獲得'field'。出於某種原因'C.mxGetPr(field)'返回null。根據文件,這意味着沒有真實的數據。然而,我使用驗證方法['mxIsDouble'](http://www.mathworks.com/help/matlab/apiref/mxisdouble.html)和['mxIsNumeric'](http:// www。 mathworks.com/help/matlab/apiref/mxisnumeric.html)並且都返回true。 – 2014-11-02 14:52:24