1

MatLab C API と Go のCgo パッケージを使用して、Go プログラムでマット ファイル内の 24x3000000 行列を読み込もうとしています。マトリックスの次元を正常に読み取ることができますが、各セル内の値にアクセスするにはどうすればよいですか? (最終的には、この行列をスライスとして Go プログラムに返すことが目標です。)

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
    }
}

参考までに、C 用のマトリックス ライブラリ API を次に示します

4

2 に答える 2

1

私はMatLabを持っていないので、テストされていません。例えば、

import (
    "fmt"
    "unsafe"
)

// Print every element in the matrix
ptr := uintptr(unsafe.Pointer(realDataPtr))
for col := 0; col < int(colTotal); col++ {
    for row := 0; row < int(rowTotal); row++ {
        // This is where I get stuck
        elem := *(*float64)(unsafe.Pointer(ptr))
        fmt.Println(elem)
        ptr += 8
    }
}
于 2014-11-02T04:08:16.967 に答える