0

Goで効率的な要素ごとの行列演算を提供するパッケージがあるかどうか疑問に思っていますか?GSLに似たものはありますか?

4

2 に答える 2

1

たとえば、cgoを介してcblasを呼び出すのは簡単です。

package main

// #include <cblas.h>
// #cgo LDFLAGS: -L/usr/lib64/atlas -lcblas
import "C"

import "fmt"

type matrix struct {
    rows  int
    cols  int
    elems []float32
}

func (a matrix) cblasmul(b matrix) (c matrix) {
    c = matrix{a.rows, b.cols, make([]float32, a.rows*b.cols)}
    C.cblas_sgemm(
        C.CblasRowMajor, C.CblasNoTrans, C.CblasNoTrans,
        C.int(a.rows), C.int(b.cols), C.int(a.cols),
        1.0,
        (*C.float)(&a.elems[0]), C.int(a.cols),
        (*C.float)(&b.elems[0]), C.int(b.cols),
        0.0,
        (*C.float)(&c.elems[0]), C.int(c.cols))

    return c
}

func main() {
    a := matrix{100, 100, make([]float32, 100*100)}
    b := matrix{100, 100, make([]float32, 100*100)}
    // ...
    c := a.cblasmul(b)
    fmt.Println(c)
}
于 2013-03-27T20:26:47.580 に答える
0

GSLにはさまざまなcgoバインディングがあり、純粋なGoポートでの試みもあります。(星に関する限り)まだ多くの認識を持っているようには見えず、数か月間非アクティブになっていますが、コードを確認することをお勧めします。

http://godoc.org/?q=gsl

于 2013-03-25T19:44:20.210 に答える