Logo

Programming-Idioms

Declare two two-dimensional arrays a and b of dimension n*m and m*n, respectively. Assign to b the transpose of a (i.e. the value with index interchange).
New implementation

Be concise.

Be useful.

All contributions dictatorially edited by webmasters to match personal tastes.

Please do not paste any copyright violating material.

Please try to avoid dependencies to third-party libraries and frameworks.

Other implementations
(def a [[1 2 3] [4 5 6] [7 8 9]])
(def b (apply (partial mapv vector) a))
real :: a(n,m), b(m,n)

b = transpose(a)
const a = [[1, 2, 3], [4, 5, 6]]
const m = a[0].length
const b = Array.from({ length: m }, (_, n) => a.map(row => row[n]))
import static java.lang.reflect.Array.newInstance;
<T> T[][] transpose(T[][] a) {
    int m, n, x = a[0].length, y = a.length;
    Class<?> t = a.getClass().getComponentType()
                             .getComponentType();
    T[][] b = (T[][]) newInstance(t, x, y);
    for (m = 0; m < y; ++m)
        for (n = 0; n < x; ++n)
            b[n][m] = a[m][n];
    return b;
}
local a = {}

for x = 1, n do
  local t = {}
  for y = 1, m do
    t[y] = {x, y}
  end
  a[x] = t
end
  
local b = {}

for y = 1, m do
  local t = {}
  for x = 1, n do
    t[x] = a[x][y]
  end
  b[y] = t
end
uses typ, omv;
var
  A: array[1..m, 1..n] of ArbFloat;
  B: array[1..n, 1..m] of ArbFloat;
begin
  ... some code to fill A
  omvtrm(
    A[1,1], m, n, n,
    B[1,1], m
  );
end.
use PDL::Basic qw(sequence transpose);
my ($m, $n) = (3, 2);
my $A = sequence $m, $n;
my $B = transpose $A;
import numpy as np
a = np.array([[1,2], [3,4], [5,6]])
b = a.T
a = [[1,2], [3,4], [5,6]]
b = list(map(list, zip(*a)))
a = [[1,2], [3,4], [5,6]]
b = a.transpose
use nalgebra::DMatrix;
use rand::prelude::*;
let a = DMatrix::<u8>::from_fn(n, m, |_, _| rand::thread_rng().gen());
let b = a.transpose();