Loïc Grenié on Mon, 18 Nov 2024 16:47:21 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Is there a function for sum of square matrix antidiagonal like "trace()" for main diagonal? |
On Mon, Nov 18, 2024 at 03:34:10PM +0100, hermann@stamm-wilbrandt.de wrote:
> Interesting, I would have thought that your atr function would
> be faster than my vecsum solution, but it is slower ...
This is due to the use of global variables...
If you use \g1, you will see
*** Warning: compiler generates copy for `M'.
> pi@raspberrypi5:~/PrimeSquares $ gp -q
> ? M=readvec("15.gp")[1];
> ? #M
> 15
> ? atr(M)=my(j=#M+1);sum(i=1,#M,j--;M[i,j]);
> ? for(i=1,100000,atr(M))
Compare this:
atr(M)=my(j=#M+1);sum(i=1,#M,j--;M[i,j]);
for(i=1,100000,atr(M))
my(M=M);for(i=1,100000,atr(M))
atr2(M)=sum(i=1,#M,M[i,#M+1-i]);
my(M=M);for(i=1,100000,atr2(M))
or
atr(~M)=my(j=#M+1);sum(i=1,#M,j--;M[i,j]);
atr2(~M)=sum(i=1,#M,M[i,#M+1-i]);
for(i=1,100000,atr(~M))
for(i=1,100000,atr2(~M))