Deconvolution/2D+: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl}}: oops, need 'say' for output)
m (→‎{{header|Perl}}: a few simplifications)
Line 859: Line 859:
my @dg = shape(@g);
my @dg = shape(@g);
my @hsize;
my @hsize;
push @hsize, ($dg[$_] - $df[$_]) + 1 for 0..$#df;
push @hsize, $dg[$_] - $df[$_] + 1 for 0..$#df;
my @toSolve = map { [row(\@g, \@f, \@hsize, $_)] } coords(shape(@g));
my @toSolve = map { [row(\@g, \@f, \@hsize, $_)] } coords(shape(@g));
rref( \@toSolve );
rref( \@toSolve );


my @h;
my @h;
my $mag = $hsize[0]*$hsize[1]*$hsize[2];
for (0.. $mag-1) {
push @h, $toSolve[$_][$mag];
}
my @soln;
my $n = 0;
my $n = 0;
for (coords(@hsize)) {
for (coords(@hsize)) {
my($i,$j,$k) = split ' ', $_;
my($k,$j,$i) = split ' ', $_;
$soln[$k][$j][$i] = $h[$n];
$h[$i][$j][$k] = $toSolve[$n++][-1];
$n++;
}
}
@soln;
@h;
}
}


Line 886: Line 880:
my @row;
my @row;
my @fdim = shape(@f);
my @fdim = shape(@f);
@gc = @gc[0..$#fdim]; # clip extraneous values
for (coords(@hsize)) {
for (coords(@hsize)) {
my @hc = reverse split ' ', $_;
my @hc = reverse split ' ', $_;
Line 997: Line 990:
]
]
);
);

my $d = scalar shape(@g);
print "${d}D array:\n";
print "h =\n";
print "\nff =\n";


my @h = deconvolve_N( \@g, \@f );
my @h = deconvolve_N( \@g, \@f );
my @ff = deconvolve_N( \@g, \@h );
my @ff = deconvolve_N( \@g, \@h );

my $d = scalar shape(@g);
print "${d}D arrays:\n";
print "h =\n";
pretty_print(0,@h);
pretty_print(0,@h);
print "\nff =\n";
pretty_print(0,@ff);</lang>
pretty_print(0,@ff);</lang>
{{out}}
{{out}}
<pre>3D array:
<pre>3D arrays:
h =
h =
[
[