Я не думаю, что вы можете многое сделать для дальнейшей оптимизации, если не считать суммирование уже при инициализации переменной smallOutput
; то есть
let smallOutput = Array2D.init (output.GetLength(0) / 5) (output.GetLength(1) / 5) (fun y x ->
let mutable v = 0
for i in [0 .. 4] do
for j in [0 .. 4] do
v <- v + weights.[j, i] * output.[y * 5 + j, x * 5 + i]
v / weightsSum)
Дело в том, что вам нужно l oop для всех записей в большем массиве, нет способа обойти это. Если вы заранее знаете структуру весовой матрицы, например, что она симметрична c, вы можете использовать ее. Думаю, честно говоря, я не уверен, сколько из оптимизации, которая принесет.