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<mailto: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<mailto:gor...@exa.unne.edu.ar>> Sent: 21 January 2025 19:07 To: Ed . <ej...@hotmail.com<mailto:ej...@hotmail.com>> Cc: pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net> <pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net>>; perldl <pdl-gene...@lists.sourceforge.net<mailto: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<mailto: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<mailto: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<mailto:gor...@exa.unne.edu.ar>> Sent: 21 January 2025 01:19 To: Ed . <ej...@hotmail.com<mailto:ej...@hotmail.com>> Cc: pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net> <pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net>>; perldl <pdl-gene...@lists.sourceforge.net<mailto: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<mailto: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<mailto:gor...@exa.unne.edu.ar>> Sent: 20 January 2025 23:35 To: Ed . <ej...@hotmail.com<mailto:ej...@hotmail.com>> Cc: pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net> <pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net>>; perldl <pdl-gene...@lists.sourceforge.net<mailto: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<mailto: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<mailto:gor...@exa.unne.edu.ar>> Sent: 20 January 2025 19:39 To: pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net> <pdl-devel@lists.sourceforge.net<mailto:pdl-devel@lists.sourceforge.net>>; perldl <pdl-gene...@lists.sourceforge.net<mailto: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