Hello again,
I find some a not pretty solution using whereND

$r=(zeroes(3,3)->ndcoords/2-pdl(0.5,0.5))->r2C
$rr=($r**2)->sumover->sqrt
($r1,$r2)=whereND($r->slice("(0)"),$r->slice("(1)"),$rr->abs<0.2)
($r3,$r4)=whereND($r->slice("(0)"),$r->slice("(1)"),$rr->abs>=0.2)

Then. modifying
$r1.= f($r1)
$r3.= f($r2,$r4)
...

Perform back dataflow to $r that I am looking for
Maybe a better solution is possible?

Best regards











El mié, 22 ene 2025 a las 12:39, Guillermo P. Ortiz (<gor...@exa.unne.edu.ar>)
escribió:

> Hello,
> the complex number in the case 1D can be obtained as expected
> doing first $r=$r->r2C
>
> But in 2D case I still did not have succeeded to match with
> dataflow on $r in the sense of the mask
>
> For example, If I do
>
> $r=(zeroes(3,3)->ndcoords/2-pdl(0.5,0.5))->r2C;
> $rr=($r**2)->sumover->sqrt;
> ($r1,$r2)=where_both($rr,$rr->abs<0.2)
>
> I obtain the expected result in $r1 and $r2 in agreement
> with the mask of the vectors lengths
>
> But, how to pass from that the respective length in the $r1
> and $r2 to the vectors in $r ? It would be some index indirection that
> manage these facts?
>
> Regards
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> El mar, 21 ene 2025 a las 20:35, Guillermo P. Ortiz (<
> gor...@exa.unne.edu.ar>) escribió:
>
>> Hi Ed,
>> yes, just I was trying with where_both
>> But I get unexpected behaviour for me in 2D case
>>
>> 1) first in 1D
>>
>> pdl> $r=zeroes(3)->ndcoords/2-pdl(0.5)
>>
>> pdl> p $r
>>
>> [
>>  [-0.5]
>>  [   0]
>>  [ 0.5]
>> ]
>>
>> pdl> ($r1,$r2)=where_both($r,$r->abs < 0.2)
>>
>> pdl> p $r1
>> [0]
>>
>> pdl> p $r2
>> [-0.5 0.5]
>>
>> now, trying to modify $r following that condition
>>
>> pdl> $r1.=$r1+1
>>
>> pdl> $r2.=$r2+3
>>
>> pdl> p $r
>>
>> [
>>  [2.5]
>>  [  1]
>>  [3.5]
>> ]
>>
>> But this seem did not work for complex number
>>
>> pdl> $r1.=$r1*(1+i)
>>
>> pdl> $r2.=$r2-(1+i)
>>
>>
>> pdl> p $r
>>
>> [
>>  [1.5]
>>
>>  [  1]
>>  [2.5]
>>
>> ]
>>
>> And, seem did not work in 2D for real case neither
>>
>> pdl> $r=zeroes(3,3)->ndcoords/2-pdl(0.5,0.5)
>>
>> pdl> p $r
>>
>> [
>>  [
>>   [-0.5 -0.5]
>>   [   0 -0.5]
>>   [ 0.5 -0.5]
>>  ]
>>  [
>>   [-0.5    0]
>>   [   0    0]
>>
>>  [ 0.5    0]
>>  ]
>>  [
>>   [-0.5  0.5]
>>
>>   [   0  0.5]
>>   [ 0.5  0.5]
>>
>> ]
>> ]
>>
>> pdl> ($r1,$r2)=where_both($r,($r**2)->sumover->sqrt < 0.2)
>>
>> pdl> p $r1
>> [0.5]
>>
>> pdl> p $r2
>> [-0.5 -0.5 0 -0.5 -0.5 -0.5 0 0]
>>
>> what I doing wrong here?
>>
>> Regards
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> El mar., 21 de enero de 2025 19:42, Ed . <ej...@hotmail.com> escribió:
>>
>>> Hi Guillermo,
>>>
>>> That does feel to me like you'd want to *not* do something on the whole
>>> ndarray, but instead do something on a $pdl->where(condition...). What
>>> do you think?
>>>
>>> Best regards,
>>> Ed
>>>
>>> ------------------------------
>>> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
>>> *Sent:* 21 January 2025 19:07
>>> *To:* Ed . <ej...@hotmail.com>
>>> *Cc:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
>>> perldl <pdl-gene...@lists.sourceforge.net>
>>> *Subject:* Re: [Pdl-devel] conditional inline
>>>
>>> For instance, I am trying with $r, like below
>>>
>>> $r=(zeroes(2*$N+1,2*$N+1)->ndcoords-pdl($N,$N))/(2*$N+1)
>>>
>>> Regards
>>>
>>> El mar, 21 ene 2025 a las 14:39, Guillermo P. Ortiz (<
>>> gor...@exa.unne.edu.ar>) escribió:
>>>
>>> Yes Ed, you are right.
>>> I want to perform different operations on $r
>>> depending on its distance to a point $r0 in 2D.
>>> Then, I guess that first, and because for further
>>> manipulation, I decide to center $r-=$r0 in
>>> such a point.
>>>
>>> Then in false code,
>>>
>>> if ( length ($r)  < $a)
>>>  { return f($r)}
>>>  else
>>> { return g($r) }
>>>
>>> where "length" I am not sure, but it could be inner($r,$r)->sqrt.
>>> Maybe no ternary expression but some subroutine will be fine also.
>>>
>>> Regards
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> El mar, 21 ene 2025 a las 14:16, Ed . (<ej...@hotmail.com>) escribió:
>>>
>>> Hi Guillermo,
>>>
>>> That conditional will, for the case you've given, always be false,
>>> because it has values more than 0.2 away from 0.5. When you use all,
>>> you are asking a question about the entire ndarray, in other words for
>>> every single value in it.
>>>
>>> I believe that there's some real problem you're trying to solve, but I'm
>>> afraid I still have absolutely no idea what it is. Please help me help you!
>>>
>>> Best regards,
>>> Ed
>>>
>>> ------------------------------
>>> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
>>> *Sent:* 21 January 2025 01:19
>>> *To:* Ed . <ej...@hotmail.com>
>>> *Cc:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
>>> perldl <pdl-gene...@lists.sourceforge.net>
>>> *Subject:* Re: [Pdl-devel] conditional inline
>>>
>>> Ok, Ed,
>>> That example did not work for me.
>>> The conditional results seems to be allways false. I mean, that it give
>>> $x also when $x is near to 0.5 than 0.2, where I is expecting the $x**2
>>> result.
>>>
>>> Regates
>>>
>>>
>>>
>>> El El lun, 20 ene 2025 a la(s) 20:39, Ed . <ej...@hotmail.com> escribió:
>>>
>>> Hi Guillermo,
>>>
>>> You may still be having a problem, but you have yet to tell us what it
>>> is. The code you sent works fine, including as many dimensions as you like
>>> (because all acts on the whole ndarray at once).
>>>
>>> If there's a problem in there, please share it :-)
>>>
>>> Best regards,
>>> Ed
>>>
>>> ------------------------------
>>> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
>>> *Sent:* 20 January 2025 23:35
>>> *To:* Ed . <ej...@hotmail.com>
>>> *Cc:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
>>> perldl <pdl-gene...@lists.sourceforge.net>
>>> *Subject:* Re: [Pdl-devel] conditional inline
>>>
>>> Thanks Ed,
>>> Using ternary conditional expression
>>> I still have some problem with múltiple disensión case.
>>> See my example in message befare
>>>
>>>
>>> El El lun, 20 ene 2025 a la(s) 19:31, Ed . <ej...@hotmail.com> escribió:
>>>
>>> Hi Guillermo,
>>>
>>> You can do that indeed, that's just Perl. If you wanted to do operations
>>> on a subset of that ndarray, then you'd do e.g.
>>>
>>> $pdl->where(($pdl-0.5)->abs < 0.2) *= 5;
>>>
>>> An observation is that the above condition could be a bit shorter by
>>> using the recently-added approx_artol: (which would also mean it ran
>>> quicker)
>>>
>>> $pdl->approx_artol(0.5, 0.2)
>>>
>>> Best regards,
>>> Ed
>>>
>>> ------------------------------
>>> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
>>> *Sent:* 20 January 2025 19:39
>>> *To:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
>>> perldl <pdl-gene...@lists.sourceforge.net>
>>> *Subject:* [Pdl-devel] conditional inline
>>>
>>> Hello !
>>>
>>> I am not sure, but maybe It is possible to do with perl PDL something
>>> like this?
>>>
>>> $ndarray= condition on $ndarray ? assign when true : assign when false
>>>
>>> for example:
>>>
>>> $x=zeroes(20)->xlinvals(0,1);
>>>
>>> $y=(all abs($x-0.5)<0.2)?$x**2:$x;
>>>
>>> Thanks in advance
>>>
>>> Regards
>>>
>>> --
>>>
>>>
>>> Dr. Guillermo P. Ortiz
>>> Electromagnetismo Aplicado
>>> Dto. Física, Facultad de Ciencias Exactas
>>> Universidad Nacional del Nordeste
>>> Avda Libertad 5460
>>> <https://www.google.com/maps/search/Avda+Libertad+5460?entry=gmail&source=g>,
>>> Campus UNNE.
>>> W3404AAS Corrientes, Argentina.
>>> (+54) 379-4424678 interno 4613
>>> gortiz* at *unne edu ar
>>>
>>>
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to