Транспонирование матрицы в чистом виде 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
}