Hi Boyd, thank you very much for your suggestions. Using that idea we might obtain a simpler solution.
pdl> $r=zeroes(3,3)->ndcoords/2-pdl(0.5,0.5) pdl> $rr=$r->magnover pdl> $mask= $rr<0.4 pdl> $x= $r->slice("(0)") pdl> $f = ($x+5) * $mask + $x*2 * (! $mask ) pdl> p $rr [ [ 0.70710678 0.5 0.70710678] [ 0.5 0 0.5] [ 0.70710678 0.5 0.70710678] ] pdl> p $mask [ [0 0 0] [0 1 0] [0 0 0] ] pdl> p $x [ [-0.5 0 0.5] [-0.5 0 0.5] [-0.5 0 0.5] ] pdl> p $f [ [-1 0 1] [-1 5 1] [-1 0 1] ] Best regards El mié, 22 ene 2025 a las 14:46, Boyd Duffee (<boyd.duf...@gmail.com>) escribió: > 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