为了账号安全,请及时绑定邮箱和手机立即绑定

元素矩阵运算 Google Go?

元素矩阵运算 Google Go?

Go
肥皂起泡泡 2021-06-04 18:46:10
我想知道是否有一个包可以在 Go 中提供高效的逐元素矩阵运算?类似于 GSL 的东西?
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

通过 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)

}


查看完整回答
反对 回复 2021-06-07
?
慕森王

TA贡献1777条经验 获得超3个赞

GSL 有各种 cgo 绑定,甚至还有一些对纯 Go 端口的尝试。似乎还没有多少人认可(就明星而言)并且已经有几个月没有活动了,但您可能想看看代码:

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


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信