Thanks Craig.
In the interim, is there a better way to do the following:
$a(which($a==0)).=1;
$b = $b(which($b > 0))->sever;
as now I'll have to replace all this sort of thing with something like:
$tmp=which($a==0);
if ($tmp->nelem > 0) { a($tmp) .= 1; }
$tmp = which($b > 0);
if ($tmp->nelem > 0) {
$b = $b($tmp)->sever;
} else {
$b = pdl([ ]);
}
Cheers,
Trevor
________________________________________
From: Craig DeForest <[email protected]>
Sent: Saturday, 13 January 2018 9:35 a.m.
To: Trevor Carey-Smith
Cc: Craig DeForest; [email protected]
Subject: Re: [Pdl-general] Slicing pdl with empty index variable
Hmmm. Looks like you’ve discovered a wart. Indexing pdl(1,2) with an Empty
does the right thing and returns Empty. But indexing a scalar or a 1-D PDL
with one element fails. I think it’s because Empties are implemented under the
hood as 1x0 PDLs (to distinguish them from Nulls, which have 0 in the first
position).
> On Jan 11, 2018, at 8:52 PM, Trevor Carey-Smith
> <[email protected]> wrote:
>
> Hi,
>
> Sorry I've been out of the PDL loop for a long time, but have an old script
> written in PDL that I use a lot. After a recent IT upgrade here we have
> shifted to PDL v2.018 and I'm getting some behaviour that is new from our
> previous install (2.4 in the old numbering system???).
>
> The script uses some which() statements to create indexing vectors to slice
> the original pdl. Normally when the which statement comes back empty, the
> slice command returns an empty pdl itself. But if the slicing dimension
> (regardless of the total number of dimensions) of the original pdl is of
> length 1 bad things happen. Perhaps an example is clearer:
>
> pdl> p $empty=pdl([])
> Empty[0]
> pdl> p $d2=pdl([1,2])
> [1 2]
> pdl> p $d2($empty)
> Empty[0]
> pdl> p $d1=pdl([1])
> [1]
> pdl> p $d1($empty)
> Stringizing problem: slice: slice starts out of bounds in pos 0 (start is 1;
> source dim 0 runs 0 to 0). eval {...} called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/lib/perl5/site_perl/5.24.1/x86_64-linux-thread-multi/PDL/Core.pm
> line 2857
> PDL::string(PDL=SCALAR(0x1053d10), undef, "") called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 402
> main::p(PDL=SCALAR(0x1053d10)) called at (eval 151) line 4
> main::__ANON__() called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 719
> eval {...} called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 719
> main::eval_and_report("p \$d1->slice(\$empty)\x{a}") called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 655
> main::process_input() called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 675
> eval {...} called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 675
> at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/lib/perl5/site_perl/5.24.1/x86_64-linux-thread-multi/PDL/Core.pm
> line 2888, <STDIN> line 92.
> PDL::string(PDL=SCALAR(0x1053d10), undef, "") called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 402
> main::p(PDL=SCALAR(0x1053d10)) called at (eval 151) line 4
> main::__ANON__() called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 719
> eval {...} called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 719
> main::eval_and_report("p \$d1->slice(\$empty)\x{a}") called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 655
> main::process_input() called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 675
> eval {...} called at
> /scale_akl_persistent/filesets/opt_niwa/centos7-x86_64-skl_prelim/GCC-4.8.5/Perl/5.24.1-GCC-4.8.5/bin/perldl
> line 675
>
> Can anyone shed any light on what's going on here??
>
> Thanks,
> Trevor.
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> pdl-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/pdl-general
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
pdl-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pdl-general