transpose method

List<List<double>> transpose (List<List<double>> matrix)

Transposes matrix: Returns a new matrix.

Implementation

List<List<double>> transpose(List<List<double>> matrix) {
  int nrows = matrix[0].length; // of result
  int ncols = matrix.length;
  List<List<double>> ret = List(nrows);
  int i, j;
  List<double> A0, A1, Bj;

  for (j = 0; j < nrows; j++) {
    ret[j] = List(ncols);
  }
  for (i = ncols - 1; i >= 1; i -= 2) {
    A1 = matrix[i];
    A0 = matrix[i - 1];
    for (j = nrows - 1; j >= 1; --j) {
      Bj = ret[j];
      Bj[i] = A1[j];
      Bj[i - 1] = A0[j];
      --j;
      Bj = ret[j];
      Bj[i] = A1[j];
      Bj[i - 1] = A0[j];
    }
    if (j == 0) {
      Bj = ret[0];
      Bj[i] = A1[0];
      Bj[i - 1] = A0[0];
    }
  }
  if (i == 0) {
    A0 = matrix[0];
    for (j = nrows - 1; j >= 1; --j) {
      ret[j][0] = A0[j];
      --j;
      ret[j][0] = A0[j];
    }
    if (j == 0) {
      ret[0][0] = A0[0];
    }
  }
  return ret;
}