@heySasha

Как транспонировать матрицу не используя циклы?

Привет! Кто знает каким способом можно транспонировать матрицу не используя циклы? Используя map, reduce, ... Например [ [1, 2], [3, 4], [5, 6] ], на выходе [ [1, 3, 5], [2, 4, 6] ].
  • Вопрос задан
  • 4928 просмотров
Решения вопроса 2
@pekc83
const transpose = matrix => matrix[0].map((col, i) => matrix.map(row => row[i]));

const baseMatrix = [[1, 2], [3, 4], [5, 6]];
const transposedMatrix = transpose(baseMatrix);
// [ [ 1, 3, 5 ], [ 2, 4, 6 ] ]
Ответ написан
@Quilin
Full-stack разработчик
В JavaScript не существует двумерных массивов, по сути матрица будет "вектором векторов". Обращение к элементу по его индексам будет выглядеть как-то так: myMatrix[i][j].

Транспонирование матрицы в этом контексте вообще не имеет никакого смысла, ведь для этого достаточно просто поменять местами i и j. Я бы посоветовал написать фасад над работой с массивом, например так:

class Matrix {
  constructor (arr, transposed) {
    this._arr = arr
    this._transposed = !!transposed
  },

  get (i, j) {
    return this._transposed
      ? this._arr[j][i]
      : this._arr[i][j]
  },
  transpose () {
    return new Matrix(this._arr.map(row => row.slice()), true)
  }
}

var matrixA = new Matrix([[1,2],[3,4],[5,6]])
matrixA.get(1, 0) // 3
var matrixB = matrixA.transpose()
matrixB.get(0, 1) // 3


Обратите внимание на то, что при транспонировании матрицы важно копировать содержимое служебного массива, в противном случае данные, модифицированные в оригинальной матрице будут отражаться и в транспонированной матрице.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы