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