transpose method
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;
}