Эффективный совокупный продукт на тензоры горгонии в Go? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь найти лучший способ финансировать совокупный продукт Gorgonia Tensor. Например:

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 для ограничения памяти. При необходимости я мог бы переключить его на матрицы гонума, но я бы предпочел не тратить дополнительную память, если есть способ сделать это с помощью float32.

...