英文:
Element-wise matrix operations Google Go?
问题
我想知道是否有一个在Go语言中提供高效逐元素矩阵操作的包?类似于GSL的东西?
英文:
I'm wondering if theres a package that provides efficient element-wise matrix operations in Go? Something similar to GSL?
答案1
得分: 1
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, 100100)}
b := matrix{100, 100, make([]float32, 100100)}
// ...
c := a.cblasmul(b)
fmt.Println(c)
}
英文:
It is easy to call e.g. cblas via cgo:
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)
}
答案2
得分: 0
有各种各样的cgo绑定到GSL,甚至还有一些纯Go端口的尝试。目前似乎没有太多的认可(就星星而言),而且已经有几个月没有活动了,但你可能想看一下这些代码:
英文:
There are various cgo-bindings to GSL and even some attempts at pure Go ports out there. None seem to have much recognition yet (as far as stars are concerned) and have been inactive for a few months, but you may want to take a look at the code:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论