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

Reply via email to