Matrix transposition: Difference between revisions
Content added Content deleted
m (→{{header|J}}) |
(Added D code) |
||
Line 155: | Line 155: | ||
NEXT rows |
NEXT rows |
||
=={{header|D}}== |
|||
<pre>module mxtrans ; |
|||
import std.stdio ; |
|||
import std.string ; |
|||
bool isRectangular(T)(T[][] a){ |
|||
if(a.length < 1 || a[0].length < 1) |
|||
return false ; |
|||
for(int i = 1 ; i < a.length; i++) |
|||
if(a[i].length != a[i-1].length) |
|||
return false ; |
|||
return true ; |
|||
} |
|||
T[][] transpose(T=real)(T[][] a) { |
|||
T[][] res ; |
|||
if(isRectangular(a)){ |
|||
res = new T[][](a[0].length, a.length) ; |
|||
for(int i = 0 ; i < a.length ; i++) |
|||
for(int j = 0 ; j < a[0].length ; j++) { |
|||
res[j][i] = a[i][j] ; |
|||
} |
|||
} else |
|||
throw new Exception("Transpose Error") ; |
|||
return res ; |
|||
} |
|||
string toString(T=real)(T[][] a){ // for pretty print |
|||
string[] s; |
|||
foreach(e ; a) |
|||
s ~= format("%8s", e)[1..$-1] ; |
|||
return "\n<" ~ join(s,"\n ") ~ ">" ; |
|||
} |
|||
void main() { |
|||
float[][] n, m = [[0.5,0,0,1],[0.0,0.5,0,0],[0.0,0,0.5,-1]] ; |
|||
writefln(" m = ", m.toString()) ; |
|||
n = m.transpose() ; |
|||
writefln(" n (m's transpose) = ", n.toString()) ; |
|||
}</pre> |
|||
=={{header|IDL}}== |
=={{header|IDL}}== |
||