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