首页 > 解决方案 > Go 中 Gorgonia 张量的有效累积乘积?

问题描述

我正在努力寻找为 Gorgonia 张量的累积产品提供资金的最佳方式。例如:

T := ts.New(ts.WithShape(3,4), ts.WithBacking(ts.Range(ts.Float32,1,13)))
    for row := 1; row < 3; row++ {
        for col :=0; col < 4; col++ {
            val1, _ := T.At(row-1, col).(float32)
            val2, _ := T.At(row, col).(float32)
            newVal := val1*val2
            T.SetAt(newVal, row, col)
        }
    }

我希望输出为:

[1   2    3    4  ]
[5   12   21   32 ]
[45  120  231  384]

这可行,但对于中等大小的张量(500x50),每次迭代需要 2500 微秒秒。我需要它更快。numpy .cumprod() 进行类似的计算大约需要 10-20 微秒。有没有更有效的编码方式?

我正在使用张量,因为我需要进行矩阵乘法,并且我想使用 float32 来进行内存限制。如有必要,我可以将其切换到 gonum 矩阵,但如果有办法使用 float32 来实现,我宁愿不必花费额外的内存。

标签: gotensorgonum

解决方案


推荐阅读