Быстро транспонировать байтовую матрицу [] [] байт в Golang сборке - PullRequest
1 голос
/ 05 августа 2020

Транспонирование матрицы в чистом виде golang выполняется медленно, а использование пакета gonum требует преобразования структуры, что требует дополнительного времени. Таким образом, версия сборки может быть лучшим решением.

Размеры матрицы варьируются ([][]byte) или могут быть фиксированными ([64][512]byte), а тип элемента может быть int32 или int64 для общий сценарий ios.

Ниже приведена версия golang:

m := 64
n := 512

// orignial matrix
M := make([][]byte, m)
for i := 0; i < m; i++ {
    M[i] = make([]byte, n)
}


func transpose(M [][]byte) [][]byte {
    m := len(M)
    n := len(M[0])
    
    // transposed matrix
    T := make([][]byte, n)
    for i := 0; i < n; i++ {
        T[i] = make([]byte, m)
    }

    var row []byte // a row in T
    for i := 0; i < n; i++ {
        row = T[i]
        for j = 0; j < m; j++ {
            row[j] = M[j][i]
        }
    }
    
    return T
}
...