Matrix transposition: Difference between revisions

Content added Content deleted
(→‎{{header|J}}: simplify)
Line 281: Line 281:


=={{header|D}}==
=={{header|D}}==
<lang d>module mxtrans ;
<lang d>import std.stdio: writefln;
import std.stdio ;
import std.string: join, format;
import std.string ;


bool isRectangular(T)(T[][] a){
T[][] transpose(T)(T[][] mat) {
static bool isRectangular(T[][] mat) {
if(a.length < 1 || a[0].length < 1)
foreach (row; mat)
return false ;
for(int i = 1 ; i < a.length; i++)
if (row.length != mat[0].length)
return false;
if(a[i].length != a[i-1].length)
return false ;
return true;
return true ;
}
}


if (!mat.length || !isRectangular(mat))
T[][] transpose(T=real)(T[][] a) {
throw new Exception("Transpose Error");
T[][] res ;

if(isRectangular(a)){
res = new T[][](a[0].length, a.length) ;
auto result = new T[][](mat[0].length, mat.length);
for(int i = 0 ; i < a.length ; i++)
for (int i = 0; i < mat.length; i++)
for(int j = 0 ; j < a[0].length ; j++) {
for (int j = 0; j < mat[0].length; j++)
res[j][i] = a[i][j] ;
result[j][i] = mat[i][j];
}
return result;
} else
throw new Exception("Transpose Error") ;
return res ;
}
}


string toString(T=real)(T[][] a){ // for pretty print
string toString(T)(T[][] mat) { // for pretty print
string[] s;
string[] parts;
foreach(e ; a)
foreach (row; mat)
s ~= format("%8s", e)[1..$-1] ;
parts ~= format("%8s", row)[1 .. $ - 1];
return "\n<" ~ join(s,"\n ") ~ ">" ;
return "\n<" ~ join(parts, "\n ") ~ ">";
}
}


void main() {
void main() {
float[][] n, m = [[0.5,0,0,1],[0.0,0.5,0,0],[0.0,0,0.5,-1]] ;
float[][] m = [[0.5,0,0,1], [0.0,0.5,0,0], [0.0,0,0.5,-1]];
writefln("M:", m.toString());

writefln(" m = ", m.toString()) ;
auto mt = m.transpose();
writefln("M transposed:", mt.toString());
n = m.transpose() ;
writefln(" n (m's transpose) = ", n.toString()) ;
}</lang>
}</lang>

=={{header|ELLA}}==
=={{header|ELLA}}==
Sample originally from ftp://ftp.dra.hmg.gb/pub/ella (a now dead link) - Public release.
Sample originally from ftp://ftp.dra.hmg.gb/pub/ella (a now dead link) - Public release.