#!/usr/bin/perl
use PDL;
my $a = pdl [
[ 0.6490, 0.0330, 0.1670, 0.3700],
[ 0.1150, 0.0290, 0.0480, 0.0650],
[ 0.0070, 0.3570, 0.3870, 0.2010],
[ 0.0630, 0.0760, 0.0540, 0.0560],
[ 0, 0.0400, 0.0160, 0.0160],
[ 0.0120, 0.0620, 0.0430, 0.0380],
[ 0.1530, 0.4020, 0.2850, 0.2550],
];
($U, $S, $V) = svd($a);
# create square matrix for 'S'
@valuesS = list $S;
$SqS = pdl [
[ $valuesS[0], 0, 0, 0],
[ 0, $valuesS[1], 0, 0],
[ 0, 0, $valuesS[2], 0],
[ 0, 0, 0, $valuesS[3]],
];
# transpose V
$Vt = $V->transpose();
$Us = $U->slice('0:1,0:6');
$Ss = $SqS->slice('0:1,0:1');
$Vs = $Vt->slice('0:3,0:1');
print "$Us\n";
print "$Ss\n";
print "$Vs\n";
$recA = $Us * $Ss * $Vs;
print "$recA\n";
####
$recA = $Us * $Ss * $Vs;
####
recA = U(:,1:ns)*S(1:ns,1:ns)*Vt(1:ns,:)