I'll throw some confusion into the mix with a different approach, which may
not suit you. I would think of the conditional as applying a series of
binary masks to your ndarray. Maybe something like

$r = rvals(9,9)
$mask = $r > 2
$r2 = $r**2 * $mask + $r * (! $mask)

where $mask is the binary value of the conditional you wanted the square
and the (! $mask) is everywhere else. To build up multiple conditionals,
you would create several masks, one for each conditional. You combine the
masks by multiplying together for AND and adding together for OR.

It's prettier, but does it work for you?  (maybe if you draw the problem
and upload it as a gist on github or similar, we can see what else you
could try)

saludos,
Boyd

On Wed, 22 Jan 2025 at 16:24, Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
wrote:

> 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
>
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to