OK Ed, in my version PDL2.098 still there does not exist whichND_both. But, let me resume here the problem that I finally solve for a toy example:
pdl> $r=(zeroes(3,3)->ndcoords/2-pdl(0.5,0.5))->r2C 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> $rr=($r**2)->sumover->sqrt pdl> ($r1,$r2)=whereND($r->using(0,1),$rr->abs < 0.3) pdl> ($r3,$r4)=whereND($r->using(0,1),$rr->abs >= 0.3) Here we have $r1 and $r2 the x and y coordinates for vectors that are shorter than 0.3. In $r3 and $r4 the respective coordinates for vectors that are larger than 0,3 pdl> $r1.=$r1+(1+i) pdl> $r3.=$r3*(1+i)+$r4 pdl> p $r1 [ [1+i] ] pdl> p $r3 [ [ -1-0.5i -0.5 0.5i -0.5-0.5i 0.5+0.5i -0.5i 0.5 1+0.5i] ] We are only interested in the x coordinates of $r but of course the modification depends on y coordinates also. Then, in this example in one case of condition imposed for the mask we add 1+i and in the complement we multiply for 1+i and add the y coordinates pdl> p $r [ [ [-1-0.5i -0.5] [ -0.5 -0.5] [ 0.5i -0.5] ] [ [-0.5-0.5i 0] [ 1+i 0] [ 0.5+0.5i 0] ] [ [ -0.5i 0.5] [ 0.5 0.5] [1+0.5i 0.5] ] ] Obtaining the desired results in $r thanks to dataflow. Thanks, I hope to be clear now and thanks again for your patience Regards El mié, 22 ene 2025 a las 18:09, Ed . (<ej...@hotmail.com>) escribió: > Hi Guillermo, > > I thought you did, but it seemed worth spelling out in case people read > the mailing-list archive later on :-) > > I'm not sure the solution you sent earlier is actually ugly! "If it's > stupid but it works, it's not stupid." But I am interested to know if > whichND_both is helpful. > > Best regards, > Ed > > ------------------------------ > *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar> > *Sent:* 22 January 2025 21:06 > *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 > > Hi Ed, > yes I realize that problem and use r2C on $r before to apply the mask, > this work fine. > Also yes for your comment on where_both about. Then, I try with whereND > and obtain > a ugly solution to my problem I guess > > Regards > > > > El mié, 22 ene 2025 a las 17:51, Ed . (<ej...@hotmail.com>) escribió: > > There's some quite complicated stuff going on here! > > This is a bit flawed conceptually: > $r1.=$r1*(1+i); > If you say .=, you're telling PDL to take the right-hand side (which will > have complex type), and assign it *into* the existing $r1, which is > real-typed. The only thing it can do is convert the complex-typed data into > real data. If you change .= to =, you're making the $r1 Perl variable > have the complex-typed ndarray, which is probably what you'd want here. > > This is also: > ($r1,$r2)=where_both($r,($r**2)->sumover->sqrt < 0.2) > Because where_both does *not* work n-dimensionally; it takes ($data, > $mask), calls which_both on the mask (which for a multi-dimensional input > will broadcast), then indexes (using index1d) a flattened version of $data > with > that. > > Do those points make sense? > > Best regards, > Ed > > ------------------------------ > *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar> > *Sent:* 21 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 > > 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