"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "GENERATED/PDL/Primitive.pm" between
PDL-2.079.tar.gz and PDL-2.080.tar.gz

About: PDL (Perl Data Language) aims to turn perl into an efficient numerical language for scientific computing (similar to IDL and MatLab).

Primitive.pm  (PDL-2.079):Primitive.pm  (PDL-2.080)
# #
# GENERATED WITH PDL::PP! Don't modify! # GENERATED WITH PDL::PP! Don't modify!
# #
package PDL::Primitive; package PDL::Primitive;
our @EXPORT_OK = qw(inner outer matmult innerwt inner2 inner2d inner2t crossp no rm indadd conv1d in uniq uniqind uniqvec hclip lclip clip clip wtstat statsover stats histogram whistogram histogram2d whistogram2d fibonacci append axisvalues cmpvec eqvec srand random randsym grandom vsearch vsearch_sample vsearch_insert_ leftmost vsearch_insert_rightmost vsearch_match vsearch_bin_inclusive vsearch_bi n_exclusive interpolate interpol interpND one2nd which which_both where where_bo th whereND whichND setops intersect ); our @EXPORT_OK = qw(inner outer matmult innerwt inner2 inner2d inner2t crossp no rm indadd conv1d in uniq uniqind uniqvec hclip lclip clip clip wtstat statsover stats histogram whistogram histogram2d whistogram2d fibonacci append axisvalues cmpvec eqvec enumvec enumvecg vsearchvec unionvec intersectvec setdiffvec union_ sorted intersect_sorted setdiff_sorted srand random randsym grandom vsearch vsea rch_sample vsearch_insert_leftmost vsearch_insert_rightmost vsearch_match vsearc h_bin_inclusive vsearch_bin_exclusive interpolate interpol interpND one2nd which which_both where where_both whereND whichND setops intersect );
our %EXPORT_TAGS = (Func=>\@EXPORT_OK); our %EXPORT_TAGS = (Func=>\@EXPORT_OK);
use PDL::Core; use PDL::Core;
use PDL::Exporter; use PDL::Exporter;
use DynaLoader; use DynaLoader;
our @ISA = ( 'PDL::Exporter','DynaLoader' ); our @ISA = ( 'PDL::Exporter','DynaLoader' );
push @PDL::Core::PP, __PACKAGE__; push @PDL::Core::PP, __PACKAGE__;
bootstrap PDL::Primitive ; bootstrap PDL::Primitive ;
skipping to change at line 60 skipping to change at line 60
# Only pull in PDL::Primitive: # Only pull in PDL::Primitive:
use PDL::Primitive; use PDL::Primitive;
=cut =cut
#line 62 "Primitive.pm" #line 62 "Primitive.pm"
=head1 FUNCTIONS =head1 FUNCTIONS
=cut =cut
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 inner =head2 inner
=for sig =for sig
Signature: (a(n); b(n); [o]c()) Signature: (a(n); b(n); [o]c())
=for ref =for ref
Inner product over one dimension Inner product over one dimension
skipping to change at line 85 skipping to change at line 85
=for bad =for bad
If C<a() * b()> contains only bad data, If C<a() * b()> contains only bad data,
C<c()> is set bad. Otherwise C<c()> will have its bad flag cleared, C<c()> is set bad. Otherwise C<c()> will have its bad flag cleared,
as it will not contain any bad values. as it will not contain any bad values.
=cut =cut
#line 104 "Primitive.pm" #line 104 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*inner = \&PDL::inner; *inner = \&PDL::inner;
#line 111 "Primitive.pm" #line 111 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 outer =head2 outer
=for sig =for sig
Signature: (a(n); b(m); [o]c(n,m)) Signature: (a(n); b(m); [o]c(n,m))
=for ref =for ref
outer product over one dimension outer product over one dimension
skipping to change at line 114 skipping to change at line 114
operator but this function is provided for convenience. operator but this function is provided for convenience.
=for bad =for bad
outer processes bad values. outer processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 142 "Primitive.pm" #line 142 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*outer = \&PDL::outer; *outer = \&PDL::outer;
#line 149 "Primitive.pm" #line 149 "Primitive.pm"
#line 104 "primitive.pd" #line 104 "primitive.pd"
=head2 x =head2 x
=for sig =for sig
skipping to change at line 212 skipping to change at line 212
] ]
INTERNALS INTERNALS
The mechanics of the multiplication are carried out by the The mechanics of the multiplication are carried out by the
L</matmult> method. L</matmult> method.
=cut =cut
#line 244 "Primitive.pm" #line 244 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 matmult =head2 matmult
=for sig =for sig
Signature: (a(t,h); b(w,t); [o]c(w,h)) Signature: (a(t,h); b(w,t); [o]c(w,h))
=for ref =for ref
Matrix multiplication Matrix multiplication
skipping to change at line 243 skipping to change at line 243
For usage, see L</x>, a description of the overloaded 'x' operator For usage, see L</x>, a description of the overloaded 'x' operator
=for bad =for bad
matmult ignores the bad-value flag of the input ndarrays. matmult ignores the bad-value flag of the input ndarrays.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 282 "Primitive.pm" #line 282 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::matmult { sub PDL::matmult {
my ($x,$y,$c) = @_; my ($x,$y,$c) = @_;
$y = PDL->topdl($y); $y = PDL->topdl($y);
$c = PDL->null unless do { local $@; eval { $c->isa('PDL') } }; $c = PDL->null unless do { local $@; eval { $c->isa('PDL') } };
while($x->getndims < 2) {$x = $x->dummy(-1)} while($x->getndims < 2) {$x = $x->dummy(-1)}
while($y->getndims < 2) {$y = $y->dummy(-1)} while($y->getndims < 2) {$y = $y->dummy(-1)}
return ($c .= $x * $y) if( ($x->dim(0)==1 && $x->dim(1)==1) || return ($c .= $x * $y) if( ($x->dim(0)==1 && $x->dim(1)==1) ||
($y->dim(0)==1 && $y->dim(1)==1) ); ($y->dim(0)==1 && $y->dim(1)==1) );
barf sprintf 'Dim mismatch in matmult of [%1$dx%2$d] x [%3$dx%4$d]: %1$d != %4$d',$x->dim(0),$x->dim(1),$y->dim(0),$y->dim(1) barf sprintf 'Dim mismatch in matmult of [%1$dx%2$d] x [%3$dx%4$d]: %1$d != %4$d',$x->dim(0),$x->dim(1),$y->dim(0),$y->dim(1)
if $y->dim(1) != $x->dim(0); if $y->dim(1) != $x->dim(0);
PDL::_matmult_int($x,$y,$c); PDL::_matmult_int($x,$y,$c);
$c; $c;
} }
#line 301 "Primitive.pm" #line 301 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*matmult = \&PDL::matmult; *matmult = \&PDL::matmult;
#line 308 "Primitive.pm" #line 308 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 innerwt =head2 innerwt
=for sig =for sig
Signature: (a(n); b(n); c(n); [o]d()) Signature: (a(n); b(n); c(n); [o]d())
=for ref =for ref
Weighted (i.e. triple) inner product Weighted (i.e. triple) inner product
skipping to change at line 287 skipping to change at line 287
d = sum_i a(i) b(i) c(i) d = sum_i a(i) b(i) c(i)
=for bad =for bad
innerwt processes bad values. innerwt processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 339 "Primitive.pm" #line 339 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*innerwt = \&PDL::innerwt; *innerwt = \&PDL::innerwt;
#line 346 "Primitive.pm" #line 346 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 inner2 =head2 inner2
=for sig =for sig
Signature: (a(n); b(n,m); c(m); [o]d()) Signature: (a(n); b(n,m); c(m); [o]d())
=for ref =for ref
Inner product of two vectors and a matrix Inner product of two vectors and a matrix
skipping to change at line 317 skipping to change at line 317
very wasteful. Instead, you should use a temporary for C<b*c>. very wasteful. Instead, you should use a temporary for C<b*c>.
=for bad =for bad
inner2 processes bad values. inner2 processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 378 "Primitive.pm" #line 378 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*inner2 = \&PDL::inner2; *inner2 = \&PDL::inner2;
#line 385 "Primitive.pm" #line 385 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 inner2d =head2 inner2d
=for sig =for sig
Signature: (a(n,m); b(n,m); [o]c()) Signature: (a(n,m); b(n,m); [o]c())
=for ref =for ref
Inner product over 2 dimensions. Inner product over 2 dimensions.
skipping to change at line 346 skipping to change at line 346
$c = inner($x->clump(2), $y->clump(2)) $c = inner($x->clump(2), $y->clump(2))
=for bad =for bad
inner2d processes bad values. inner2d processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 418 "Primitive.pm" #line 418 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*inner2d = \&PDL::inner2d; *inner2d = \&PDL::inner2d;
#line 425 "Primitive.pm" #line 425 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 inner2t =head2 inner2t
=for sig =for sig
Signature: (a(j,n); b(n,m); c(m,k); [t]tmp(n,k); [o]d(j,k))) Signature: (a(j,n); b(n,m); c(m,k); [t]tmp(n,k); [o]d(j,k)))
=for ref =for ref
Efficient Triple matrix product C<a*b*c> Efficient Triple matrix product C<a*b*c>
skipping to change at line 383 skipping to change at line 383
closures at some point. closures at some point.
=for bad =for bad
inner2t processes bad values. inner2t processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 465 "Primitive.pm" #line 465 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*inner2t = \&PDL::inner2t; *inner2t = \&PDL::inner2t;
#line 472 "Primitive.pm" #line 472 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 crossp =head2 crossp
=for sig =for sig
Signature: (a(tri=3); b(tri); [o] c(tri)) Signature: (a(tri=3); b(tri); [o] c(tri))
=for ref =for ref
Cross product of two 3D vectors Cross product of two 3D vectors
skipping to change at line 417 skipping to change at line 417
orthogonal to C<$x> and C<$y> orthogonal to C<$x> and C<$y>
=for bad =for bad
crossp does not process bad values. crossp does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 509 "Primitive.pm" #line 509 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*crossp = \&PDL::crossp; *crossp = \&PDL::crossp;
#line 516 "Primitive.pm" #line 516 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 norm =head2 norm
=for sig =for sig
Signature: (vec(n); [o] norm(n)) Signature: (vec(n); [o] norm(n))
=for ref =for ref
Normalises a vector to unit Euclidean length Normalises a vector to unit Euclidean length
=for bad =for bad
norm processes bad values. norm processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 541 "Primitive.pm" #line 541 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*norm = \&PDL::norm; *norm = \&PDL::norm;
#line 548 "Primitive.pm" #line 548 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 indadd =head2 indadd
=for sig =for sig
Signature: (input(n); indx ind(n); [io] sum(m)) Signature: (input(n); indx ind(n); [io] sum(m))
=for ref =for ref
Broadcasting index add: add C<input> to the C<ind> element of C<sum>, i.e: Broadcasting index add: add C<input> to the C<ind> element of C<sum>, i.e:
skipping to change at line 492 skipping to change at line 492
=for bad =for bad
=for bad =for bad
The routine barfs on bad indices, and bad inputs set target outputs bad. The routine barfs on bad indices, and bad inputs set target outputs bad.
=cut =cut
#line 602 "Primitive.pm" #line 602 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*indadd = \&PDL::indadd; *indadd = \&PDL::indadd;
#line 609 "Primitive.pm" #line 609 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 conv1d =head2 conv1d
=for sig =for sig
Signature: (a(m); kern(p); [o]b(m); int reflect) Signature: (a(m); kern(p); [o]b(m); int reflect)
=for ref =for ref
1D convolution along first dimension 1D convolution along first dimension
skipping to change at line 563 skipping to change at line 563
unless special care is taken. unless special care is taken.
=for bad =for bad
conv1d ignores the bad-value flag of the input ndarrays. conv1d ignores the bad-value flag of the input ndarrays.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 684 "Primitive.pm" #line 684 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::conv1d { sub PDL::conv1d {
my $opt = pop @_ if ref($_[-1]) eq 'HASH'; my $opt = pop @_ if ref($_[-1]) eq 'HASH';
die 'Usage: conv1d( a(m), kern(p), [o]b(m), {Options} )' die 'Usage: conv1d( a(m), kern(p), [o]b(m), {Options} )'
if @_<2 || @_>3; if @_<2 || @_>3;
my($x,$kern) = @_; my($x,$kern) = @_;
my $c = @_ == 3 ? $_[2] : PDL->null; my $c = @_ == 3 ? $_[2] : PDL->null;
PDL::_conv1d_int($x,$kern,$c, PDL::_conv1d_int($x,$kern,$c,
!(defined $opt && exists $$opt{Boundary}) ? 0 : !(defined $opt && exists $$opt{Boundary}) ? 0 :
lc $$opt{Boundary} eq "reflect"); lc $$opt{Boundary} eq "reflect");
return $c; return $c;
} }
#line 703 "Primitive.pm" #line 703 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*conv1d = \&PDL::conv1d; *conv1d = \&PDL::conv1d;
#line 710 "Primitive.pm" #line 710 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 in =head2 in
=for sig =for sig
Signature: (a(); b(n); [o] c()) Signature: (a(); b(n); [o] c())
=for ref =for ref
test if a is in the set of values b test if a is in the set of values b
skipping to change at line 618 skipping to change at line 618
and is generally faster. and is generally faster.
=for bad =for bad
in does not process bad values. in does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 753 "Primitive.pm" #line 753 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*in = \&PDL::in; *in = \&PDL::in;
#line 760 "Primitive.pm" #line 760 "Primitive.pm"
#line 697 "primitive.pd" #line 697 "primitive.pd"
=head2 uniq =head2 uniq
=for ref =for ref
skipping to change at line 818 skipping to change at line 818
? ($srtdice != $srtdice->rotate(-1))->mv(0,-1)->orover->which ? ($srtdice != $srtdice->rotate(-1))->mv(0,-1)->orover->which
: $srtdice->orover->which; : $srtdice->orover->which;
my $ans = $uniq->nelem > 0 ? $srtdice->dice($uniq) : my $ans = $uniq->nelem > 0 ? $srtdice->dice($uniq) :
($srtdice->nelem > 0) ? $srtdice->slice("0,:") : ($srtdice->nelem > 0) ? $srtdice->slice("0,:") :
$srtdice; $srtdice;
return $ans->append($somebad)->append($nanvec->mv(0,-1))->mv(0,-1); return $ans->append($somebad)->append($nanvec->mv(0,-1))->mv(0,-1);
} }
#line 962 "Primitive.pm" #line 962 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 hclip =head2 hclip
=for sig =for sig
Signature: (a(); b(); [o] c()) Signature: (a(); b(); [o] c())
=for ref =for ref
clip (threshold) C<$a> by C<$b> (C<$b> is upper bound) clip (threshold) C<$a> by C<$b> (C<$b> is upper bound)
=for bad =for bad
hclip processes bad values. hclip processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 987 "Primitive.pm" #line 987 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::hclip { sub PDL::hclip {
my ($x,$y) = @_; my ($x,$y) = @_;
my $c; my $c;
if ($x->is_inplace) { if ($x->is_inplace) {
$x->set_inplace(0); $c = $x; $x->set_inplace(0); $c = $x;
} elsif (@_ > 2) {$c=$_[2]} else {$c=PDL->nullcreate($x)} } elsif (@_ > 2) {$c=$_[2]} else {$c=PDL->nullcreate($x)}
PDL::_hclip_int($x,$y,$c); PDL::_hclip_int($x,$y,$c);
return $c; return $c;
} }
#line 1002 "Primitive.pm" #line 1002 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*hclip = \&PDL::hclip; *hclip = \&PDL::hclip;
#line 1009 "Primitive.pm" #line 1009 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 lclip =head2 lclip
=for sig =for sig
Signature: (a(); b(); [o] c()) Signature: (a(); b(); [o] c())
=for ref =for ref
clip (threshold) C<$a> by C<$b> (C<$b> is lower bound) clip (threshold) C<$a> by C<$b> (C<$b> is lower bound)
=for bad =for bad
lclip processes bad values. lclip processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1034 "Primitive.pm" #line 1034 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::lclip { sub PDL::lclip {
my ($x,$y) = @_; my ($x,$y) = @_;
my $c; my $c;
if ($x->is_inplace) { if ($x->is_inplace) {
$x->set_inplace(0); $c = $x; $x->set_inplace(0); $c = $x;
} elsif (@_ > 2) {$c=$_[2]} else {$c=PDL->nullcreate($x)} } elsif (@_ > 2) {$c=$_[2]} else {$c=PDL->nullcreate($x)}
PDL::_lclip_int($x,$y,$c); PDL::_lclip_int($x,$y,$c);
return $c; return $c;
} }
#line 1049 "Primitive.pm" #line 1049 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*lclip = \&PDL::lclip; *lclip = \&PDL::lclip;
#line 1056 "Primitive.pm" #line 1056 "Primitive.pm"
#line 933 "primitive.pd" #line 933 "primitive.pd"
=head2 clip =head2 clip
=for ref =for ref
skipping to change at line 916 skipping to change at line 916
=for bad =for bad
clip handles bad values since it is just a clip handles bad values since it is just a
wrapper around L</hclip> and wrapper around L</hclip> and
L</lclip>. L</lclip>.
=cut =cut
#line 1080 "Primitive.pm" #line 1080 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 clip =head2 clip
=for sig =for sig
Signature: (a(); l(); h(); [o] c()) Signature: (a(); l(); h(); [o] c())
=for ref =for ref
info not available info not available
=for bad =for bad
clip processes bad values. clip processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1107 "Primitive.pm" #line 1107 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
*clip = \&PDL::clip; *clip = \&PDL::clip;
sub PDL::clip { sub PDL::clip {
my($x, $l, $h) = @_; my($x, $l, $h) = @_;
my $d; my $d;
unless(defined($l) || defined($h)) { unless(defined($l) || defined($h)) {
# Deal with pathological case # Deal with pathological case
if($x->is_inplace) { if($x->is_inplace) {
$x->set_inplace(0); $x->set_inplace(0);
return $x; return $x;
skipping to change at line 973 skipping to change at line 973
} elsif( defined($h) ) { } elsif( defined($h) ) {
PDL::_hclip_int($x,$h,$d); PDL::_hclip_int($x,$h,$d);
} else { } else {
die "This can't happen (clip contingency) - file a bug"; die "This can't happen (clip contingency) - file a bug";
} }
return $d; return $d;
} }
#line 1146 "Primitive.pm" #line 1146 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*clip = \&PDL::clip; *clip = \&PDL::clip;
#line 1153 "Primitive.pm" #line 1153 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 wtstat =head2 wtstat
=for sig =for sig
Signature: (a(n); wt(n); avg(); [o]b(); int deg) Signature: (a(n); wt(n); avg(); [o]b(); int deg)
=for ref =for ref
Weighted statistical moment of given degree Weighted statistical moment of given degree
skipping to change at line 1005 skipping to change at line 1005
=for bad =for bad
=for bad =for bad
Bad values are ignored in any calculation; C<$b> will only Bad values are ignored in any calculation; C<$b> will only
have its bad flag set if the output contains any bad data. have its bad flag set if the output contains any bad data.
=cut =cut
#line 1187 "Primitive.pm" #line 1187 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*wtstat = \&PDL::wtstat; *wtstat = \&PDL::wtstat;
#line 1194 "Primitive.pm" #line 1194 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 statsover =head2 statsover
=for sig =for sig
Signature: (a(n); w(n); float+ [o]avg(); float+ [o]prms(); int+ [o]median(); i nt+ [o]min(); int+ [o]max(); float+ [o]adev(); float+ [o]rms()) Signature: (a(n); w(n); float+ [o]avg(); float+ [o]prms(); int+ [o]median(); i nt+ [o]min(); int+ [o]max(); float+ [o]adev(); float+ [o]rms())
=for ref =for ref
Calculate useful statistics over a dimension of an ndarray Calculate useful statistics over a dimension of an ndarray
skipping to change at line 1082 skipping to change at line 1082
=for bad =for bad
=for bad =for bad
Bad values are simply ignored in the calculation, effectively reducing Bad values are simply ignored in the calculation, effectively reducing
the sample size. If all data are bad then the output data are marked bad. the sample size. If all data are bad then the output data are marked bad.
=cut =cut
#line 1275 "Primitive.pm" #line 1275 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::statsover { sub PDL::statsover {
barf('Usage: ($mean,[$prms, $median, $min, $max, $adev, $rms]) = statsover($d ata,[$weights])') if @_>2; barf('Usage: ($mean,[$prms, $median, $min, $max, $adev, $rms]) = statsover($d ata,[$weights])') if @_>2;
my ($data, $weights) = @_; my ($data, $weights) = @_;
$weights //= $data->ones(); $weights //= $data->ones();
my $median = $data->medover; my $median = $data->medover;
my $mean = PDL->nullcreate($data); my $mean = PDL->nullcreate($data);
my $rms = PDL->nullcreate($data); my $rms = PDL->nullcreate($data);
my $min = PDL->nullcreate($data); my $min = PDL->nullcreate($data);
my $max = PDL->nullcreate($data); my $max = PDL->nullcreate($data);
my $adev = PDL->nullcreate($data); my $adev = PDL->nullcreate($data);
my $prms = PDL->nullcreate($data); my $prms = PDL->nullcreate($data);
PDL::_statsover_int($data, $weights, $mean, $prms, $median, $min, $max, $adev , $rms); PDL::_statsover_int($data, $weights, $mean, $prms, $median, $min, $max, $adev , $rms);
wantarray ? ($mean, $prms, $median, $min, $max, $adev, $rms) : $mean; wantarray ? ($mean, $prms, $median, $min, $max, $adev, $rms) : $mean;
} }
#line 1296 "Primitive.pm" #line 1296 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*statsover = \&PDL::statsover; *statsover = \&PDL::statsover;
#line 1303 "Primitive.pm" #line 1303 "Primitive.pm"
#line 1184 "primitive.pd" #line 1184 "primitive.pd"
=head2 stats =head2 stats
=for ref =for ref
skipping to change at line 1151 skipping to change at line 1151
) { ) {
$weights = $weights + zeroes($data) $weights = $weights + zeroes($data)
} }
$weights = $weights->flat; $weights = $weights->flat;
} }
return PDL::statsover($data->flat,$weights); return PDL::statsover($data->flat,$weights);
} }
#line 1351 "Primitive.pm" #line 1351 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 histogram =head2 histogram
=for sig =for sig
Signature: (in(n); int+[o] hist(m); double step; double min; int msize => m) Signature: (in(n); int+[o] hist(m); double step; double min; int msize => m)
=for ref =for ref
Calculates a histogram for given stepsize and minimum. Calculates a histogram for given stepsize and minimum.
skipping to change at line 1195 skipping to change at line 1195
[0 2 1] [0 2 1]
=for bad =for bad
histogram processes bad values. histogram processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1403 "Primitive.pm" #line 1403 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*histogram = \&PDL::histogram; *histogram = \&PDL::histogram;
#line 1410 "Primitive.pm" #line 1410 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 whistogram =head2 whistogram
=for sig =for sig
Signature: (in(n); float+ wt(n);float+[o] hist(m); double step; double min; in t msize => m) Signature: (in(n); float+ wt(n);float+[o] hist(m); double step; double min; in t msize => m)
=for ref =for ref
Calculates a histogram from weighted data for given stepsize and minimum. Calculates a histogram from weighted data for given stepsize and minimum.
skipping to change at line 1242 skipping to change at line 1242
[0 0.2 0.5 0] [0 0.2 0.5 0]
=for bad =for bad
whistogram processes bad values. whistogram processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1459 "Primitive.pm" #line 1459 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*whistogram = \&PDL::whistogram; *whistogram = \&PDL::whistogram;
#line 1466 "Primitive.pm" #line 1466 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 histogram2d =head2 histogram2d
=for sig =for sig
Signature: (ina(n); inb(n); int+[o] hist(ma,mb); double stepa; double mina; in t masize => ma; Signature: (ina(n); inb(n); int+[o] hist(ma,mb); double stepa; double mina; in t masize => ma;
double stepb; double minb; int mbsize => mb;) double stepb; double minb; int mbsize => mb;)
=for ref =for ref
skipping to change at line 1294 skipping to change at line 1294
] ]
=for bad =for bad
histogram2d processes bad values. histogram2d processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1520 "Primitive.pm" #line 1520 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*histogram2d = \&PDL::histogram2d; *histogram2d = \&PDL::histogram2d;
#line 1527 "Primitive.pm" #line 1527 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 whistogram2d =head2 whistogram2d
=for sig =for sig
Signature: (ina(n); inb(n); float+ wt(n);float+[o] hist(ma,mb); double stepa; double mina; int masize => ma; Signature: (ina(n); inb(n); float+ wt(n);float+[o] hist(ma,mb); double stepa; double mina; int masize => ma;
double stepb; double minb; int mbsize => mb;) double stepb; double minb; int mbsize => mb;)
=for ref =for ref
skipping to change at line 1346 skipping to change at line 1346
] ]
=for bad =for bad
whistogram2d processes bad values. whistogram2d processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1581 "Primitive.pm" #line 1581 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*whistogram2d = \&PDL::whistogram2d; *whistogram2d = \&PDL::whistogram2d;
#line 1588 "Primitive.pm" #line 1588 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 fibonacci =head2 fibonacci
=for sig =for sig
Signature: (i(n); indx [o]x(n)) Signature: (i(n); indx [o]x(n))
=for ref =for ref
Constructor - a vector with Fibonacci's sequence Constructor - a vector with Fibonacci's sequence
=for bad =for bad
fibonacci does not process bad values. fibonacci does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1613 "Primitive.pm" #line 1613 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub fibonacci { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->fibonacci : PDL ->fibonacci(@_) } sub fibonacci { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->fibonacci : PDL ->fibonacci(@_) }
sub PDL::fibonacci{ sub PDL::fibonacci{
my $x = &PDL::Core::_construct; my $x = &PDL::Core::_construct;
my $is_inplace = $x->is_inplace; my $is_inplace = $x->is_inplace;
my ($in, $out) = $x->clump(-1); my ($in, $out) = $x->clump(-1);
$out = $is_inplace ? $in->inplace : PDL->null; $out = $is_inplace ? $in->inplace : PDL->null;
PDL::_fibonacci_int($in, $out); PDL::_fibonacci_int($in, $out);
$out; $out;
} }
#line 1628 "Primitive.pm" #line 1628 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
#line 1633 "Primitive.pm" #line 1633 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 append =head2 append
=for sig =for sig
Signature: (a(n); b(m); [o] c(mn)) Signature: (a(n); b(m); [o] c(mn))
=for ref =for ref
append two ndarrays by concatenating along their first dimensions append two ndarrays by concatenating along their first dimensions
skipping to change at line 1423 skipping to change at line 1423
have the same sized dimensions. have the same sized dimensions.
=for bad =for bad
append does not process bad values. append does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1676 "Primitive.pm" #line 1676 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
#line 1493 "primitive.pd" #line 1491 "primitive.pd"
sub PDL::append { sub PDL::append {
my ($i1, $i2, $o) = map PDL->topdl($_), @_; my ($i1, $i2, $o) = map PDL->topdl($_), @_;
if (grep $_->isempty, $i1, $i2) { if (grep $_->isempty, $i1, $i2) {
if (!defined $o) { if (!defined $o) {
return $i2->isnull ? PDL->zeroes(0) : $i2->copy if $i1->isempty; return $i2->isnull ? PDL->zeroes(0) : $i2->copy if $i1->isempty;
return $i1->isnull ? PDL->zeroes(0) : $i1->copy; return $i1->isnull ? PDL->zeroes(0) : $i1->copy;
} else { } else {
$o .= $i2->isnull ? PDL->zeroes(0) : $i2, return $o if $i1->isempty; $o .= $i2->isnull ? PDL->zeroes(0) : $i2, return $o if $i1->isempty;
$o .= $i1->isnull ? PDL->zeroes(0) : $i1, return $o; $o .= $i1->isnull ? PDL->zeroes(0) : $i1, return $o;
} }
} }
$o //= PDL->null; $o //= PDL->null;
PDL::_append_int($i1, $i2->convert($i1->type), $o); PDL::_append_int($i1, $i2->convert($i1->type), $o);
$o; $o;
} }
#line 1079 "../../blib/lib/PDL/PP.pm" #line 969 "../../blib/lib/PDL/PP.pm"
#line 1702 "Primitive.pm" #line 1702 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*append = \&PDL::append; *append = \&PDL::append;
#line 1709 "Primitive.pm" #line 1709 "Primitive.pm"
#line 1540 "primitive.pd" #line 1538 "primitive.pd"
=head2 glue =head2 glue
=for usage =for usage
$c = $x->glue(<dim>,$y,...) $c = $x->glue(<dim>,$y,...)
=for ref =for ref
Glue two or more PDLs together along an arbitrary dimension Glue two or more PDLs together along an arbitrary dimension
skipping to change at line 1527 skipping to change at line 1527
while($dim >= $y->ndims) { while($dim >= $y->ndims) {
$y = $y->dummy(-1,1); $y = $y->dummy(-1,1);
} }
$y = $y->xchg(0,$dim); $y = $y->xchg(0,$dim);
$x = $x->append($y); $x = $x->append($y);
} }
$x->xchg(0,$dim); $x->xchg(0,$dim);
} }
#line 1787 "Primitive.pm" #line 1787 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*axisvalues = \&PDL::axisvalues; *axisvalues = \&PDL::axisvalues;
#line 1794 "Primitive.pm" #line 1794 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 cmpvec =head2 cmpvec
=for sig =for sig
Signature: (a(n); b(n); sbyte [o]c()) Signature: (a(n); b(n); sbyte [o]c())
=for ref =for ref
Compare two vectors lexicographically, returning -1 if a is less, 1 if Compare two vectors lexicographically.
greater, 0 if equal.
Returns -1 if a is less, 1 if greater, 0 if equal.
=for bad =for bad
The output is bad if any input values up to the point of inequality are The output is bad if any input values up to the point of inequality are
bad - any after are ignored. bad - any after are ignored.
=cut =cut
#line 1822 "Primitive.pm" #line 1823 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*cmpvec = \&PDL::cmpvec; *cmpvec = \&PDL::cmpvec;
#line 1829 "Primitive.pm" #line 1830 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 eqvec =head2 eqvec
=for sig =for sig
Signature: (a(n); b(n); sbyte [o]c()) Signature: (a(n); b(n); sbyte [o]c())
=for ref =for ref
Compare two vectors, returning 1 if equal, 0 if not equal. Compare two vectors, returning 1 if equal, 0 if not equal.
=for bad =for bad
The output is bad if any input values are bad. The output is bad if any input values are bad.
=cut =cut
#line 1854 "Primitive.pm" #line 1855 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*eqvec = \&PDL::eqvec; *eqvec = \&PDL::eqvec;
#line 1861 "Primitive.pm" #line 1862 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 enumvec
=for sig
Signature: (v(M,N); indx [o]k(N))
=for ref
Enumerate a list of vectors with locally unique keys.
Given a sorted list of vectors $v, generate a vector $k containing locally uniqu
e keys for the elements of $v
(where an "element" is a vector of length $M ocurring in $v).
Note that the keys returned in $k are only unique over a run of a single vector
in $v,
so that each unique vector in $v has at least one 0 (zero) index in $k associate
d with it.
If you need global keys, see enumvecg().
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
enumvec does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 1897 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*enumvec = \&PDL::enumvec;
#line 1904 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 enumvecg
=for sig
Signature: (v(M,N); indx [o]k(N))
=for ref
Enumerate a list of vectors with globally unique keys.
Given a sorted list of vectors $v, generate a vector $k containing globally uniq
ue keys for the elements of $v
(where an "element" is a vector of length $M ocurring in $v).
Basically does the same thing as:
$k = $v->vsearchvec($v->uniqvec);
... but somewhat more efficiently.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
enumvecg does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 1940 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*enumvecg = \&PDL::enumvecg;
#line 1947 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearchvec
=for sig
Signature: (find(M); which(M,N); indx [o]found())
=for ref
Routine for searching N-dimensional values - akin to vsearch() for vectors.
=for usage
$found = vsearchvec($find, $which);
$nearest = $which->dice_axis(1,$found);
Returns for each row-vector in C<$find> the index along dimension N
of the least row vector of C<$which>
greater or equal to it.
C<$which> should be sorted in increasing order.
If the value of C<$find> is larger
than any member of C<$which>, the index to the last element of C<$which> is
returned.
See also: L</vsearch>.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
vsearchvec does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 1989 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*vsearchvec = \&PDL::vsearchvec;
#line 1996 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 unionvec
=for sig
Signature: (a(M,NA); b(M,NB); [o]c(M,NC); indx [o]nc())
=for ref
Union of two vector-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order.
On return, $nc() holds the actual number of vector-values in the union.
In scalar context, slices $c() to the actual number of elements in the union
and returns the sliced PDL.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
unionvec does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2030 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::unionvec {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($nc));
$nc = PDL->null if (!defined($nc));
PDL::_unionvec_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
return $c->slice(",0:".($nc->max-1));
}
#line 2045 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*unionvec = \&PDL::unionvec;
#line 2052 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 intersectvec
=for sig
Signature: (a(M,NA); b(M,NB); [o]c(M,NC); indx [o]nc())
=for ref
Intersection of two vector-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order.
On return, $nc() holds the actual number of vector-values in the intersection.
In scalar context, slices $c() to the actual number of elements in the intersect
ion
and returns the sliced PDL.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
intersectvec does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2085 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::intersectvec {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($c));
$nc = PDL->null if (!defined($nc));
PDL::_intersectvec_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
my $nc_max = $nc->max;
return ($nc_max > 0
? $c->slice(",0:".($nc_max-1))
: $c->reshape($c->dim(0), 0, ($c->dims)[2..($c->ndims-1)]));
}
#line 2103 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*intersectvec = \&PDL::intersectvec;
#line 2110 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 setdiffvec
=for sig
Signature: (a(M,NA); b(M,NB); [o]c(M,NC); indx [o]nc())
=for ref
Set-difference ($a() \ $b()) of two vector-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order.
On return, $nc() holds the actual number of vector-values in the computed vector
set.
In scalar context, slices $c() to the actual number of elements in the output ve
ctor set
and returns the sliced PDL.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
setdiffvec does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2144 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::setdiffvec {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($c));
$nc = PDL->null if (!defined($nc));
PDL::_setdiffvec_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
my $nc_max = $nc->max;
return ($nc_max > 0
? $c->slice(",0:".($nc_max-1))
: $c->reshape($c->dim(0), 0, ($c->dims)[2..($c->ndims-1)]));
}
#line 2162 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*setdiffvec = \&PDL::setdiffvec;
#line 2169 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 union_sorted
=for sig
Signature: (a(NA); b(NB); [o]c(NC); indx [o]nc())
=for ref
Union of two flat sorted unique-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order and contain no
duplicates.
On return, $nc() holds the actual number of values in the union.
In scalar context, reshapes $c() to the actual number of elements in the union a
nd returns it.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
union_sorted does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2201 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::union_sorted {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($c));
$nc = PDL->null if (!defined($nc));
PDL::_union_sorted_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
return $c->slice("0:".($nc->max-1));
}
#line 2216 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*union_sorted = \&PDL::union_sorted;
#line 2223 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 intersect_sorted
=for sig
Signature: (a(NA); b(NB); [o]c(NC); indx [o]nc())
=for ref
Intersection of two flat sorted unique-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order and contain no
duplicates.
On return, $nc() holds the actual number of values in the intersection.
In scalar context, reshapes $c() to the actual number of elements in the interse
ction and returns it.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
intersect_sorted does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2255 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::intersect_sorted {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($c));
$nc = PDL->null if (!defined($nc));
PDL::_intersect_sorted_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
my $nc_max = $nc->max;
return ($nc_max > 0
? $c->slice("0:".($nc_max-1))
: $c->reshape(0, ($c->dims)[1..($c->ndims-1)]));
}
#line 2273 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*intersect_sorted = \&PDL::intersect_sorted;
#line 2280 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 setdiff_sorted
=for sig
Signature: (a(NA); b(NB); [o]c(NC); indx [o]nc())
=for ref
Set-difference ($a() \ $b()) of two flat sorted unique-valued PDLs.
Input PDLs $a() and $b() B<MUST> be sorted in lexicographic order and contain no
duplicate values.
On return, $nc() holds the actual number of values in the computed vector set.
In scalar context, reshapes $c() to the actual number of elements in the differe
nce set and returns it.
Contributed by Bryan Jurish E<lt>moocow@cpan.orgE<gt>.
=for bad
setdiff_sorted does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any
of the input ndarrays.
=cut
#line 2313 "Primitive.pm"
#line 949 "../../blib/lib/PDL/PP.pm"
sub PDL::setdiff_sorted {
my ($a,$b,$c,$nc) = @_;
$c = PDL->null if (!defined($c));
$nc = PDL->null if (!defined($nc));
PDL::_setdiff_sorted_int($a,$b,$c,$nc);
return ($c,$nc) if (wantarray);
my $nc_max = $nc->max;
return ($nc_max > 0
? $c->slice("0:".($nc_max-1))
: $c->reshape(0, ($c->dims)[1..($c->ndims-1)]));
}
#line 2331 "Primitive.pm"
#line 950 "../../blib/lib/PDL/PP.pm"
*setdiff_sorted = \&PDL::setdiff_sorted;
#line 2338 "Primitive.pm"
#line 948 "../../blib/lib/PDL/PP.pm"
=head2 srand =head2 srand
=for sig =for sig
Signature: (a()) Signature: (a())
=for ref =for ref
Seed random-number generator with a 64-bit int. Will generate seed data Seed random-number generator with a 64-bit int. Will generate seed data
skipping to change at line 1607 skipping to change at line 1994
srand(); # uses current time srand(); # uses current time
srand(5); # fixed number e.g. for testing srand(5); # fixed number e.g. for testing
=for bad =for bad
srand does not process bad values. srand does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1895 "Primitive.pm" #line 2372 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
*srand = \&PDL::srand; *srand = \&PDL::srand;
sub PDL::srand { PDL::_srand_int($_[0] // PDL::Core::seed()) } sub PDL::srand { PDL::_srand_int($_[0] // PDL::Core::seed()) }
#line 1903 "Primitive.pm" #line 2380 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*srand = \&PDL::srand; *srand = \&PDL::srand;
#line 1910 "Primitive.pm" #line 2387 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 random =head2 random
=for sig =for sig
Signature: (a()) Signature: (a())
=for ref =for ref
Constructor which returns ndarray of random numbers Constructor which returns ndarray of random numbers
skipping to change at line 1653 skipping to change at line 2040
You can use the PDL function L</srand> to seed the random generator. You can use the PDL function L</srand> to seed the random generator.
If it has not been called yet, it will be with the current time. If it has not been called yet, it will be with the current time.
=for bad =for bad
random does not process bad values. random does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 1951 "Primitive.pm" #line 2428 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub random { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->random : PDL->rand om(@_) } sub random { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->random : PDL->rand om(@_) }
sub PDL::random { sub PDL::random {
my $class = shift; my $class = shift;
my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce; my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce;
PDL::_random_int($x); PDL::_random_int($x);
return $x; return $x;
} }
#line 1964 "Primitive.pm" #line 2441 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
#line 1969 "Primitive.pm" #line 2446 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 randsym =head2 randsym
=for sig =for sig
Signature: (a()) Signature: (a())
=for ref =for ref
Constructor which returns ndarray of random numbers Constructor which returns ndarray of random numbers
skipping to change at line 1701 skipping to change at line 2088
You can use the PDL function L</srand> to seed the random generator. You can use the PDL function L</srand> to seed the random generator.
If it has not been called yet, it will be with the current time. If it has not been called yet, it will be with the current time.
=for bad =for bad
randsym does not process bad values. randsym does not process bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 2009 "Primitive.pm" #line 2486 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub randsym { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->randsym : PDL->ra ndsym(@_) } sub randsym { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->randsym : PDL->ra ndsym(@_) }
sub PDL::randsym { sub PDL::randsym {
my $class = shift; my $class = shift;
my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce; my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce;
PDL::_randsym_int($x); PDL::_randsym_int($x);
return $x; return $x;
} }
#line 2022 "Primitive.pm" #line 2499 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
#line 2027 "Primitive.pm" #line 2504 "Primitive.pm"
#line 1812 "primitive.pd" #line 2313 "primitive.pd"
=head2 grandom =head2 grandom
=for ref =for ref
Constructor which returns ndarray of Gaussian random numbers Constructor which returns ndarray of Gaussian random numbers
=for usage =for usage
$x = grandom([type], $nx, $ny, $nz,...); $x = grandom([type], $nx, $ny, $nz,...);
skipping to change at line 1749 skipping to change at line 2136
=cut =cut
sub grandom { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->grandom : PDL->gr andom(@_) } sub grandom { ref($_[0]) && ref($_[0]) ne 'PDL::Type' ? $_[0]->grandom : PDL->gr andom(@_) }
sub PDL::grandom { sub PDL::grandom {
my $class = shift; my $class = shift;
my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce; my $x = scalar(@_)? $class->new_from_specification(@_) : $class->new_or_inpla ce;
use PDL::Math 'ndtri'; use PDL::Math 'ndtri';
$x .= ndtri(randsym($x)); $x .= ndtri(randsym($x));
return $x; return $x;
} }
#line 2063 "Primitive.pm" #line 2540 "Primitive.pm"
#line 1852 "primitive.pd" #line 2353 "primitive.pd"
=head2 vsearch =head2 vsearch
=for sig =for sig
Signature: ( vals(); xs(n); [o] indx(); [\%options] ) Signature: ( vals(); xs(n); [o] indx(); [\%options] )
=for ref =for ref
Efficiently search for values in a sorted ndarray, returning indices. Efficiently search for values in a sorted ndarray, returning indices.
skipping to change at line 1897 skipping to change at line 2284
$mode eq 'sample' ? \&vsearch_sample $mode eq 'sample' ? \&vsearch_sample
: $mode eq 'insert_leftmost' ? \&vsearch_insert_leftmost : $mode eq 'insert_leftmost' ? \&vsearch_insert_leftmost
: $mode eq 'insert_rightmost' ? \&vsearch_insert_rightmost : $mode eq 'insert_rightmost' ? \&vsearch_insert_rightmost
: $mode eq 'match' ? \&vsearch_match : $mode eq 'match' ? \&vsearch_match
: $mode eq 'bin_inclusive' ? \&vsearch_bin_inclusive : $mode eq 'bin_inclusive' ? \&vsearch_bin_inclusive
: $mode eq 'bin_exclusive' ? \&vsearch_bin_exclusive : $mode eq 'bin_exclusive' ? \&vsearch_bin_exclusive
: croak( "unknown vsearch mode: $mode\n" ); : croak( "unknown vsearch mode: $mode\n" );
} }
*PDL::vsearch = \&vsearch; *PDL::vsearch = \&vsearch;
#line 2214 "Primitive.pm" #line 2691 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_sample =head2 vsearch_sample
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Search for values in a sorted array, return index appropriate for sampling from a distribution Search for values in a sorted array, return index appropriate for sampling from a distribution
skipping to change at line 1965 skipping to change at line 2352
$c = vsearch_sample($y, $x); # Now, $c will have the appropriate distr. $c = vsearch_sample($y, $x); # Now, $c will have the appropriate distr.
It is possible to use the L<cumusumover|PDL::Ufunc/cumusumover> It is possible to use the L<cumusumover|PDL::Ufunc/cumusumover>
function to obtain cumulative probabilities from absolute probabilities. function to obtain cumulative probabilities from absolute probabilities.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2308 "Primitive.pm" #line 2785 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_sample = \&PDL::vsearch_sample; *vsearch_sample = \&PDL::vsearch_sample;
#line 2315 "Primitive.pm" #line 2792 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_insert_leftmost =head2 vsearch_insert_leftmost
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Determine the insertion point for values in a sorted array, inserting before dup licates. Determine the insertion point for values in a sorted array, inserting before dup licates.
skipping to change at line 2034 skipping to change at line 2421
i = 0 i = 0
If C<$x> contains duplicated elements, I<I> is the index of the If C<$x> contains duplicated elements, I<I> is the index of the
leftmost (by index in array) duplicate if I<V> matches. leftmost (by index in array) duplicate if I<V> matches.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2405 "Primitive.pm" #line 2882 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_insert_leftmost = \&PDL::vsearch_insert_leftmost; *vsearch_insert_leftmost = \&PDL::vsearch_insert_leftmost;
#line 2412 "Primitive.pm" #line 2889 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_insert_rightmost =head2 vsearch_insert_rightmost
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Determine the insertion point for values in a sorted array, inserting after dupl icates. Determine the insertion point for values in a sorted array, inserting after dupl icates.
skipping to change at line 2103 skipping to change at line 2490
i = $x->nelem - 1 i = $x->nelem - 1
If C<$x> contains duplicated elements, I<I> is the index of the If C<$x> contains duplicated elements, I<I> is the index of the
leftmost (by index in array) duplicate if I<V> matches. leftmost (by index in array) duplicate if I<V> matches.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2502 "Primitive.pm" #line 2979 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_insert_rightmost = \&PDL::vsearch_insert_rightmost; *vsearch_insert_rightmost = \&PDL::vsearch_insert_rightmost;
#line 2509 "Primitive.pm" #line 2986 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_match =head2 vsearch_match
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Match values against a sorted array. Match values against a sorted array.
skipping to change at line 2141 skipping to change at line 2528
index of that element, otherwise it is I<-( insertion_point + 1 )>, index of that element, otherwise it is I<-( insertion_point + 1 )>,
where I<insertion_point> is an index in C<$x> where I<V> may be where I<insertion_point> is an index in C<$x> where I<V> may be
inserted while maintaining the order in C<$x>. If C<$x> has inserted while maintaining the order in C<$x>. If C<$x> has
duplicated values, I<I> may refer to any of them. duplicated values, I<I> may refer to any of them.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2557 "Primitive.pm" #line 3034 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_match = \&PDL::vsearch_match; *vsearch_match = \&PDL::vsearch_match;
#line 2564 "Primitive.pm" #line 3041 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_bin_inclusive =head2 vsearch_bin_inclusive
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Determine the index for values in a sorted array of bins, lower bound inclusive. Determine the index for values in a sorted array of bins, lower bound inclusive.
skipping to change at line 2208 skipping to change at line 2595
i = $x->nelem - 1 i = $x->nelem - 1
If C<$x> contains duplicated elements, I<I> is the index of the If C<$x> contains duplicated elements, I<I> is the index of the
righmost (by index in array) duplicate if I<V> matches. righmost (by index in array) duplicate if I<V> matches.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2652 "Primitive.pm" #line 3129 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_bin_inclusive = \&PDL::vsearch_bin_inclusive; *vsearch_bin_inclusive = \&PDL::vsearch_bin_inclusive;
#line 2659 "Primitive.pm" #line 3136 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 vsearch_bin_exclusive =head2 vsearch_bin_exclusive
=for sig =for sig
Signature: (vals(); x(n); indx [o]idx()) Signature: (vals(); x(n); indx [o]idx())
=for ref =for ref
Determine the index for values in a sorted array of bins, lower bound exclusive. Determine the index for values in a sorted array of bins, lower bound exclusive.
skipping to change at line 2275 skipping to change at line 2662
i = $x->nelem - 1 i = $x->nelem - 1
If C<$x> contains duplicated elements, I<I> is the index of the If C<$x> contains duplicated elements, I<I> is the index of the
righmost (by index in array) duplicate if I<V> matches. righmost (by index in array) duplicate if I<V> matches.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2747 "Primitive.pm" #line 3224 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*vsearch_bin_exclusive = \&PDL::vsearch_bin_exclusive; *vsearch_bin_exclusive = \&PDL::vsearch_bin_exclusive;
#line 2754 "Primitive.pm" #line 3231 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 interpolate =head2 interpolate
=for sig =for sig
Signature: (xi(); x(n); y(n); [o] yi(); int [o] err()) Signature: (xi(); x(n); y(n); [o] yi(); int [o] err())
=for ref =for ref
routine for 1D linear interpolation routine for 1D linear interpolation
skipping to change at line 2321 skipping to change at line 2708
See also L</interpol>, which uses the same routine, See also L</interpol>, which uses the same routine,
differing only in the handling of extrapolation - an error message differing only in the handling of extrapolation - an error message
is printed rather than returning an error ndarray. is printed rather than returning an error ndarray.
=for bad =for bad
needs major (?) work to handles bad values needs major (?) work to handles bad values
=cut =cut
#line 2802 "Primitive.pm" #line 3279 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*interpolate = \&PDL::interpolate; *interpolate = \&PDL::interpolate;
#line 2809 "Primitive.pm" #line 3286 "Primitive.pm"
#line 2528 "primitive.pd" #line 3029 "primitive.pd"
=head2 interpol =head2 interpol
=for sig =for sig
Signature: (xi(); x(n); y(n); [o] yi()) Signature: (xi(); x(n); y(n); [o] yi())
=for ref =for ref
routine for 1D linear interpolation routine for 1D linear interpolation
skipping to change at line 2363 skipping to change at line 2750
my $xi = shift; my $xi = shift;
my $x = shift; my $x = shift;
my $y = shift; my $y = shift;
my $yi = @_ == 1 ? $_[0] : PDL->null; my $yi = @_ == 1 ? $_[0] : PDL->null;
interpolate( $xi, $x, $y, $yi, my $err = PDL->null ); interpolate( $xi, $x, $y, $yi, my $err = PDL->null );
print "some values had to be extrapolated\n" print "some values had to be extrapolated\n"
if any $err; if any $err;
return $yi if @_ == 0; return $yi if @_ == 0;
} # sub: interpol() } # sub: interpol()
*PDL::interpol = \&interpol; *PDL::interpol = \&interpol;
#line 2848 "Primitive.pm" #line 3325 "Primitive.pm"
#line 2566 "primitive.pd" #line 3067 "primitive.pd"
=head2 interpND =head2 interpND
=for ref =for ref
Interpolate values from an N-D ndarray, with switchable method Interpolate values from an N-D ndarray, with switchable method
=for example =for example
$source = 10*xvals(10,10) + yvals(10,10); $source = 10*xvals(10,10) + yvals(10,10);
skipping to change at line 2607 skipping to change at line 2994
$mag = $mag->dummy(-1,$index->dim($i)); $mag = $mag->dummy(-1,$index->dim($i));
} }
my $out = cos($phase + $phref ) * $mag; my $out = cos($phase + $phref ) * $mag;
$out = $out->clump($source->ndims)->sumover; $out = $out->clump($source->ndims)->sumover;
return $out; return $out;
} else { } else {
barf("interpND: unknown method '$method'; valid ones are 'linear' and 'samp le'.\n"); barf("interpND: unknown method '$method'; valid ones are 'linear' and 'samp le'.\n");
} }
} }
#line 3095 "Primitive.pm" #line 3572 "Primitive.pm"
#line 2816 "primitive.pd" #line 3317 "primitive.pd"
=head2 one2nd =head2 one2nd
=for ref =for ref
Converts a one dimensional index ndarray to a set of ND coordinates Converts a one dimensional index ndarray to a set of ND coordinates
=for usage =for usage
@coords=one2nd($x, $indices) @coords=one2nd($x, $indices)
skipping to change at line 2657 skipping to change at line 3044
my @dimension=$x->dims; my @dimension=$x->dims;
$ind = indx($ind); $ind = indx($ind);
my(@index); my(@index);
my $count=0; my $count=0;
foreach (@dimension) { foreach (@dimension) {
$index[$count++]=$ind % $_; $index[$count++]=$ind % $_;
$ind /= $_; $ind /= $_;
} }
return @index; return @index;
} }
#line 3147 "Primitive.pm" #line 3624 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 which =head2 which
=for sig =for sig
Signature: (mask(n); indx [o] inds(n); indx [o]lastout()) Signature: (mask(n); indx [o] inds(n); indx [o]lastout())
=for ref =for ref
Returns indices of non-zero values from a 1-D PDL Returns indices of non-zero values from a 1-D PDL
skipping to change at line 2715 skipping to change at line 3102
[0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9]
pdl> $indx = which($x>6); p $indx pdl> $indx = which($x>6); p $indx
[7 8 9] [7 8 9]
=for bad =for bad
which processes bad values. which processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 3213 "Primitive.pm" #line 3690 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub which { my ($this,$out) = @_; sub which { my ($this,$out) = @_;
$this = $this->flat; $this = $this->flat;
$out //= $this->nullcreate; $out //= $this->nullcreate;
PDL::_which_int($this,$out,my $lastout = $this->nullcreate); PDL::_which_int($this,$out,my $lastout = $this->nullcreate);
my $lastoutmax = $lastout->max->sclr; my $lastoutmax = $lastout->max->sclr;
$lastoutmax ? $out->slice('0:'.($lastoutmax-1))->sever : empty(in dx); $lastoutmax ? $out->slice('0:'.($lastoutmax-1))->sever : empty(in dx);
} }
*PDL::which = \&which; *PDL::which = \&which;
#line 3227 "Primitive.pm" #line 3704 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*which = \&PDL::which; *which = \&PDL::which;
#line 3234 "Primitive.pm" #line 3711 "Primitive.pm"
#line 1058 "../../blib/lib/PDL/PP.pm" #line 948 "../../blib/lib/PDL/PP.pm"
=head2 which_both =head2 which_both
=for sig =for sig
Signature: (mask(n); indx [o] inds(n); indx [o]notinds(n); indx [o]lastout(); indx [o]lastoutn()) Signature: (mask(n); indx [o] inds(n); indx [o]notinds(n); indx [o]lastout(); indx [o]lastoutn())
=for ref =for ref
Returns indices of nonzero and zero values in a mask PDL Returns indices of nonzero and zero values in a mask PDL
skipping to change at line 2767 skipping to change at line 3154
pdl> ($big, $small) = which_both($x >= 5); p "$big\n$small" pdl> ($big, $small) = which_both($x >= 5); p "$big\n$small"
[5 6 7 8 9] [5 6 7 8 9]
[0 1 2 3 4] [0 1 2 3 4]
=for bad =for bad
which_both processes bad values. which_both processes bad values.
It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays. It will set the bad-value flag of all output ndarrays if the flag is set for any of the input ndarrays.
=cut =cut
#line 3277 "Primitive.pm" #line 3754 "Primitive.pm"
#line 1059 "../../blib/lib/PDL/PP.pm" #line 949 "../../blib/lib/PDL/PP.pm"
sub which_both { my ($this,$outi,$outni) = @_; sub which_both { my ($this,$outi,$outni) = @_;
$this = $this->flat; $this = $this->flat;
$outi //= $this->nullcreate; $outi //= $this->nullcreate;
$outni //= $this->nullcreate; $outni //= $this->nullcreate;
PDL::_which_both_int($this,$outi,$outni,my $lastout = $this->null create,my $lastoutn = $this->nullcreate); PDL::_which_both_int($this,$outi,$outni,my $lastout = $this->null create,my $lastoutn = $this->nullcreate);
my $lastoutmax = $lastout->max->sclr; my $lastoutmax = $lastout->max->sclr;
$outi = $lastoutmax ? $outi->slice('0:'.($lastoutmax-1))->sever : empty(indx); $outi = $lastoutmax ? $outi->slice('0:'.($lastoutmax-1))->sever : empty(indx);
return $outi if !wantarray; return $outi if !wantarray;
my $lastoutnmax = $lastoutn->max->sclr; my $lastoutnmax = $lastoutn->max->sclr;
($outi, $lastoutnmax ? $outni->slice('0:'.($lastoutnmax-1))->seve r : empty(indx)); ($outi, $lastoutnmax ? $outni->slice('0:'.($lastoutnmax-1))->seve r : empty(indx));
} }
*PDL::which_both = \&which_both; *PDL::which_both = \&which_both;
#line 3295 "Primitive.pm" #line 3772 "Primitive.pm"
#line 1060 "../../blib/lib/PDL/PP.pm" #line 950 "../../blib/lib/PDL/PP.pm"
*which_both = \&PDL::which_both; *which_both = \&PDL::which_both;
#line 3302 "Primitive.pm" #line 3779 "Primitive.pm"
#line 2997 "primitive.pd" #line 3498 "primitive.pd"
=head2 where =head2 where
=for ref =for ref
Use a mask to select values from one or more data PDLs Use a mask to select values from one or more data PDLs
C<where> accepts one or more data ndarrays and a mask ndarray. It C<where> accepts one or more data ndarrays and a mask ndarray. It
returns a list of output ndarrays, corresponding to the input data returns a list of output ndarrays, corresponding to the input data
ndarrays. Each output ndarray is a 1-dimensional list of values in its ndarrays. Each output ndarray is a 1-dimensional list of values in its
skipping to change at line 2855 skipping to change at line 3242
if($_[-1]->getndims > 1) { if($_[-1]->getndims > 1) {
my $mask = $_[-1]->clump(-1)->which; my $mask = $_[-1]->clump(-1)->which;
return map {$_->clump(-1)->index($mask)} @_[0..$#_-1]; return map {$_->clump(-1)->index($mask)} @_[0..$#_-1];
} else { } else {
my $mask = $_[-1]->which; my $mask = $_[-1]->which;
return map {$_->index($mask)} @_[0..$#_-1]; return map {$_->index($mask)} @_[0..$#_-1];
} }
} }
} }
*where = \&PDL::where; *where = \&PDL::where;
#line 3371 "Primitive.pm" #line 3848 "Primitive.pm"
#line 3065 "primitive.pd" #line 3566 "primitive.pd"
=head2 where_both =head2 where_both
=for ref =for ref
Returns slices (non-zero in mask, zero) of an ndarray according to a mask Returns slices (non-zero in mask, zero) of an ndarray according to a mask
=for usage =for usage
($match_vals, $non_match_vals) = where_both($pdl, $mask); ($match_vals, $non_match_vals) = where_both($pdl, $mask);
skipping to change at line 2893 skipping to change at line 3280
=cut =cut
sub PDL::where_both { sub PDL::where_both {
barf "Usage: where_both(\$pdl, \$mask)\n" if @_ != 2; barf "Usage: where_both(\$pdl, \$mask)\n" if @_ != 2;
my ($arr, $mask) = @_; # $mask has 0==false, 1==true my ($arr, $mask) = @_; # $mask has 0==false, 1==true
my $arr_flat = $arr->clump(-1); my $arr_flat = $arr->clump(-1);
map $arr_flat->index1d($_), PDL::which_both($mask); map $arr_flat->index1d($_), PDL::which_both($mask);
} }
*where_both = \&PDL::where_both; *where_both = \&PDL::where_both;
#line 3411 "Primitive.pm" #line 3888 "Primitive.pm"
#line 3103 "primitive.pd" #line 3604 "primitive.pd"
=head2 whereND =head2 whereND
=for ref =for ref
C<where> with support for ND masks and broadcasting C<where> with support for ND masks and broadcasting
C<whereND> accepts one or more data ndarrays and a C<whereND> accepts one or more data ndarrays and a
mask ndarray. It returns a list of output ndarrays, mask ndarray. It returns a list of output ndarrays,
corresponding to the input data ndarrays. The values corresponding to the input data ndarrays. The values
skipping to change at line 2973 skipping to change at line 3360
foreach ( dims($mask) ) { shift(@idims) }; foreach ( dims($mask) ) { shift(@idims) };
my $ndim = 0; my $ndim = 0;
foreach my $id ($n, @idims[0..($#idims-1)]) { foreach my $id ($n, @idims[0..($#idims-1)]) {
$where_sub_i = $where_sub_i->splitdim($ndim++,$id) if $n>0; $where_sub_i = $where_sub_i->splitdim($ndim++,$id) if $n>0;
} }
push @to_return, $where_sub_i; push @to_return, $where_sub_i;
} }
return (@to_return == 1) ? $to_return[0] : @to_return; return (@to_return == 1) ? $to_return[0] : @to_return;
} }
*whereND = \&PDL::whereND; *whereND = \&PDL::whereND;
#line 3493 "Primitive.pm" #line 3970 "Primitive.pm"
#line 3184 "primitive.pd" #line 3685 "primitive.pd"
=head2 whichND =head2 whichND
=for ref =for ref
Return the coordinates of non-zero values in a mask. Return the coordinates of non-zero values in a mask.
=for usage =for usage
WhichND returns the N-dimensional coordinates of each nonzero value in WhichND returns the N-dimensional coordinates of each nonzero value in
skipping to change at line 3078 skipping to change at line 3465
} }
for my $i (0..$#mdims) { for my $i (0..$#mdims) {
my($s) = $ind->index($i); my($s) = $ind->index($i);
$s /= $mult->index($i); $s /= $mult->index($i);
$s %= $mdims[$i]; $s %= $mdims[$i];
} }
return $ind; return $ind;
} }
#line 3600 "Primitive.pm" #line 4077 "Primitive.pm"
#line 3293 "primitive.pd" #line 3794 "primitive.pd"
=head2 setops =head2 setops
=for ref =for ref
Implements simple set operations like union and intersection Implements simple set operations like union and intersection
=for usage =for usage
Usage: $set = setops($x, <OPERATOR>, $y); Usage: $set = setops($x, <OPERATOR>, $y);
skipping to change at line 3260 skipping to change at line 3647
# Make ordered list of set union. # Make ordered list of set union.
my $union = append($x, $y)->qsort; my $union = append($x, $y)->qsort;
return $union->where($union == rotate($union, -1)); return $union->where($union == rotate($union, -1));
} else { } else {
print "The operation $op is not known!"; print "The operation $op is not known!";
return -1; return -1;
} }
} }
#line 3785 "Primitive.pm" #line 4262 "Primitive.pm"
#line 3476 "primitive.pd" #line 3977 "primitive.pd"
=head2 intersect =head2 intersect
=for ref =for ref
Calculate the intersection of two ndarrays Calculate the intersection of two ndarrays
=for usage =for usage
Usage: $set = intersect($x, $y); Usage: $set = intersect($x, $y);
skipping to change at line 3297 skipping to change at line 3684
=cut =cut
*intersect = \&PDL::intersect; *intersect = \&PDL::intersect;
sub PDL::intersect { sub PDL::intersect {
return setops($_[0], 'AND', $_[1]); return setops($_[0], 'AND', $_[1]);
} }
#line 3824 "Primitive.pm" #line 4301 "Primitive.pm"
#line 3512 "primitive.pd" #line 4013 "primitive.pd"
=head1 AUTHOR =head1 AUTHOR
Copyright (C) Tuomas J. Lukka 1997 (lukka@husc.harvard.edu). Contributions Copyright (C) Tuomas J. Lukka 1997 (lukka@husc.harvard.edu). Contributions
by Christian Soeller (c.soeller@auckland.ac.nz), Karl Glazebrook by Christian Soeller (c.soeller@auckland.ac.nz), Karl Glazebrook
(kgb@aaoepp.aao.gov.au), Craig DeForest (deforest@boulder.swri.edu) (kgb@aaoepp.aao.gov.au), Craig DeForest (deforest@boulder.swri.edu)
and Jarle Brinchmann (jarle@astro.up.pt) and Jarle Brinchmann (jarle@astro.up.pt)
All rights reserved. There is no warranty. You are allowed All rights reserved. There is no warranty. You are allowed
to redistribute this software / documentation under certain to redistribute this software / documentation under certain
conditions. For details, see the file COPYING in the PDL conditions. For details, see the file COPYING in the PDL
distribution. If this file is separated from the PDL distribution, distribution. If this file is separated from the PDL distribution,
the copyright notice should be included in the file. the copyright notice should be included in the file.
Updated for CPAN viewing compatibility by David Mertens. Updated for CPAN viewing compatibility by David Mertens.
=cut =cut
#line 3848 "Primitive.pm" #line 4325 "Primitive.pm"
# Exit with OK status # Exit with OK status
1; 1;
 End of changes. 148 change blocks. 
151 lines changed or deleted 560 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)