OK here is some deeper diving in to the problem
use PDL;
$x = rcols 'tmp.dat'; # This does causes the error
#$x = sequence(4)+1; # This works
print $x, "\n";
$x *= 100;
print $x, "\n";
$y=&PDL::_clump_int($x,-1);
print $y, "\n"; # prints [0 0 0 0]
;
looks like the error is happening in the internal pp routine _clump_int in
slices.pd.
I also found ->sever() had the same behaviour with rcols:
pdl> $x = rcols 'tmp.dat'
Reading data into ndarrays of type: [ Double ]
Read in 4 elements.
pdl> $x *= 100
pdl> p $x
[100 200 300 400]
pdl> p $x->sever
[0 0 0 0]
Note this is not a general problem with dataflow, if I make a sequence and
slice or index is then the ops work fine. It is just something weird on the
ndarray produced by rcols.
Karl
> On 7 Jan 2024, at 3:41 pm, Karl Glazebrook via pdl-general
> <[email protected]> wrote:
>
> Ah! I believe the difference between medover and median is a clump(-1) to
> collapse the dimensions
>
> There does it indeed to be something wrong with clump too, so that is
> probably the underlying cause
>
> pdl> $x = rcols 'tmp.dat'
>
> Reading data into ndarrays of type: [ Double ]
> Read in 4 elements.
>
> pdl> p $x
>
> [1 2 3 4]
> pdl> $x *= 100
>
>
> pdl> p $x
>
> [100 200 300 400]
> pdl> p $x->clump(-1)
>
> [0 0 0 0]
>
> What could be happening in rcols() that produces an ndarray that behaves like
> that?
>
> Karl
>
>
>> On 7 Jan 2024, at 12:48 pm, Luis Mochan <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> I noticed that medover and maxover do work as expected in this case.
>>
>>
>> On Sun, Jan 07, 2024 at 11:26:56AM +1100, Karl Glazebrook via pdl-general
>> wrote:
>>> Hi all,
>>>
>>> This dinosaur just upgraded from PDL v2.025 to v.2.084 (yes, I know that is
>>> lame)
>>>
>>> I noticed a few things when running one of my complicated codes, I will
>>> start seperate email threads
>>>
>>> First there seems to be a serious rcols bug:
>>>
>>>
>>> e.g. create a file
>>>
>>> # tmp.dat
>>> 1
>>> 2
>>> 3
>>> 4
>>>
>>>
>>> Loaded PDL v2.084 (supports bad values)
>>> pdl> $x = rcols 'tmp.dat'
>>> Reading data into ndarrays of type: [ Double ]
>>> Read in 4 elements.
>>>
>>> pdl> p $x
>>> [1 2 3 4]
>>> pdl> $x *= 100
>>>
>>> pdl> p $x
>>> [100 200 300 400]
>>> pdl> p median($x)
>>> 0
>>> pdl> p $x
>>> [100 200 300 400]
>>>
>>>
>>> It seems the median function sees the values BEFORE the inplace
>>> multiplacation, whereas print does not. This is very bad. min() and max()
>>> are similar. No idea what is going on here! The behaviour or absent from
>>> v2.025
>>>
>>> Notes
>>> - making a $x->copy() removes the effect
>>> - creating $x using sequence also removes, so it is something to do with
>>> rcols() and not inplace in general?
>>>
>>> I’d be interested to know if others can reproduce this. It definitely needs
>>> a fix
>>>
>>> best
>>>
>>> Karl
>>>
>>>
>>>
>>
>>
>>> _______________________________________________
>>> pdl-general mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.sourceforge.net/lists/listinfo/pdl-general
>>
>>
>> --
>>
>> o
>> W. Luis Mochán, | tel:(52)(777)329-1734 /<(*)
>> Instituto de Ciencias Físicas, UNAM | fax:(52)(777)317-5388 `>/ /\
>> Av. Universidad s/n CP 62210 | (*)/\/ \
>> Cuernavaca, Morelos, México | [email protected]
>> <mailto:[email protected]> /\_/\__/
>> GPG: 791EB9EB, C949 3F81 6D9B 1191 9A16 C2DF 5F0A C52B 791E B9EB
>
> _______________________________________________
> pdl-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/pdl-general
_______________________________________________
pdl-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pdl-general