Re: C is it faster than numpy
Martin <[email protected]> Fri, 25 Feb 2022 09:57:05 +0000
| Newsgroups | gmane.comp.python.org.uk |
|---|---|
| Message-ID | <CAPy44ZUgQ=0__siSk9xhnbQy5APQJy3yXJUFr=CzO20QnXJPPA@mail.gmail.com> |
--===============3878107664300450176== Content-Type: multipart/alternative; boundary="00000000000030962f05d8d4b952" --00000000000030962f05d8d4b952 Content-Type: text/plain; charset="UTF-8" Yeah it uses BLAS, you can read about it here https://markus-beuckelmann.de/blog/boosting-numpy-blas.html On Fri, 25 Feb 2022, 09:54 SW, <[email protected]> wrote: > I think it uses fortran (or used to?) but yes, still close to the metal. > > Thanks, > S > > On 25/02/2022 10:41, Giorgio Zoppi wrote: > > Well, > numpy is written in C :) Maybe your C is not the numpy equivalent? > Best Regards, > Giorgio > > Il giorno ven 25 feb 2022 alle ore 09:03 BELAHCENE Abdelkader < > [email protected]> ha scritto: > >> Hi, >> a lot of people think that C (or C++) is faster than python, yes I agree, >> but I think that's not the case with numpy, I believe numpy is faster than >> C, at least in some cases. >> >> >> *Is there another explanation ? Or where can find a doc speaking about >> the subject? *Thanks a lot >> Regards >> Numpy implements vectorization for arrays, or I'm wrong. Anyway here is >> an example Let's look at the following case: >> Here is the result on my laptop i3: >> >> Labs$ *python3 tempsExe.py 50000* >> sum with Python: 1250025000 and NumPy 1250025000 >> time used Python Sum: * 37.28 sec * >> time used Numpy Sum: *1.85 sec* >> >> Labs$ *./tt 50000 * >> >> >> * CPU time :7.521730 The value : 1250025000 * >> -------------------------------------------- >> >> This is the Python3 program : >> >> import timeit as it >> import numpy as np >> import sys >> try : >> n=eval(sys.argv[1]) >> except: >> print ("needs integer as argument") ; exit() >> >> a=range(1,n+1) >> b=np.array(a) >> def func1(): return sum(a) >> def func2(): return np.sum(b) >> >> print(f"sum with Python: {func1()} and NumPy {func2()} ") >> tm1=it.timeit(stmt=func1, number=n) >> print(f"time used Python Sum: {round(tm1,2)} sec") >> tm2=it.timeit(stmt=func2, number=n) >> print(f"time used Numpy Sum: {round(tm2,2)} sec") >> >> and Here the C program: >> #include <time.h> >> #include <stdio.h> >> #include <stdlib.h> >> long func1(int n){ >> long r=0; >> for (int i=1; i<= n;i++) r+= i; >> return r; >> } >> int main(int argc, char* argv[]){ >> clock_t c0, c1; >> long v,count; int n; >> if ( argc < 2) { >> printf("Please give an argument"); >> return -1; >> } >> n=atoi(argv[1]); >> c0 = clock(); >> *for (int j=0;j < n;j++) v=func1(n);* >> c1 = clock(); >> printf ("\tCPU time :%.2f sec", (float)(c1 - c0)/CLOCKS_PER_SEC); >> printf("\n\tThe value : %ld\n", v); >> } >> _______________________________________________ >> python-uk mailing list >> [email protected] >> https://mail.python.org/mailman/listinfo/python-uk >> > > > -- > Life is a chess game - Anonymous. > > _______________________________________________ > python-uk mailing [email protected]://mail.python.org/mailman/listinfo/python-uk > > > _______________________________________________ > python-uk mailing list > [email protected] > https://mail.python.org/mailman/listinfo/python-uk > --00000000000030962f05d8d4b952 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto">Yeah it uses BLAS, you can read about it here=C2=A0<a hre= f=3D"https://markus-beuckelmann.de/blog/boosting-numpy-blas.html">https://m= arkus-beuckelmann.de/blog/boosting-numpy-blas.html</a></div><br><div class= =3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, 25 Feb 2022,= 09:54 SW, <<a href=3D"mailto:[email protected]">[email protected]= o.uk</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"mar= gin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> =20 <div> <div>I think it uses fortran (or used to?) but yes, still close to the metal.<br> <br> Thanks,<br> S<br> <br> On 25/02/2022 10:41, Giorgio Zoppi wrote:<br> </div> <blockquote type=3D"cite"> =20 <div dir=3D"ltr">Well, <div>numpy is written in C :) Maybe your C is not the numpy equivalent?</div> <div>Best Regards,</div> <div>Giorgio</div> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">Il giorno ven 25 feb 2022 all= e ore 09:03 BELAHCENE Abdelkader <<a href=3D"mailto:abdelkader.b= [email protected]" target=3D"_blank" rel=3D"noreferrer">abdelkader.belahcene= @enst.dz</a>> ha scritto:<br> </div> <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex= ;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div dir=3D"ltr">Hi,<br> a lot of people think that C (or C++) is faster than python, yes I agree, but I think that's not the case with numpy, I believe numpy is faster than C, at least in some cases.<br> <b>Is there another explanation ?<br> Or where can find =C2=A0a doc speaking =C2=A0about the subjec= t?<br> </b>Thanks a lot <br> Regards<br> Numpy implements vectorization for arrays, or I'm wrong. Anyway here is an example Let's look at the following case:= <br> Here is the result on my laptop i3:<br> <br> Labs$ <b>python3 tempsExe.py=C2=A0 50000</b> <br> =C2=A0 sum with Python: 1250025000 and NumPy 1250025000<br> =C2=A0 =C2=A0 =C2=A0 time used Python Sum:=C2=A0<b> 37.28 sec <= /b><br> =C2=A0 =C2=A0 =C2=A0 time used =C2=A0Numpy Sum:=C2=A0 <b>1.85 s= ec</b><br> <br> Labs$ <b>./tt =C2=A0=C2=A0 50000 </b><br> =C2=A0<b> =C2=A0 CPU =C2=A0time :7.521730<br> =C2=A0 =C2=A0 The value : 1250025000 <br> </b>--------------------------------------------<br> <br> This is the Python3 program :<br> <br> import timeit as it<br> import numpy as np<br> import sys<br> try :<br> n=3Deval(sys.argv[1])<br> except:<br> print ("needs integer as argument") ; exit()<br> <br> a=3Drange(1,n+1)<br> b=3Dnp.array(a)<br> def func1(): =C2=A0 =C2=A0 return sum(a)<br> def func2(): return np.sum(b)<br> <br> print(f"sum with Python: {func1()} and NumPy {func2()} &qu= ot;)<br> tm1=3Dit.timeit(stmt=3Dfunc1, number=3Dn)<br> print(f"time used Python Sum: {round(tm1,2)} sec")<br= > tm2=3Dit.timeit(stmt=3Dfunc2, number=3Dn)<br> print(f"time used =C2=A0Numpy Sum: {round(tm2,2)} sec"= ;)<br> <br> and Here the C program:<br> #include <time.h><br> #include <stdio.h><br> #include <stdlib.h><br> long func1(int n){<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 long =C2=A0r= =3D0;<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (int =C2=A0i=3D1= ; i<=3D n;i++) r+=3D i;<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return r;<br> }<br> int main(int argc, char* argv[]){<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 clock_t c0, c1= ; <br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 long v,count; int n;= <br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if ( argc < 2) {<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 printf("Please give an argument");<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 return -1;<br> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }<br> =C2=A0=C2=A0=C2=A0 n=3Datoi(argv[1]); <br> =C2=A0=C2=A0=C2=A0 c0 =3D clock();<br> =C2=A0=C2=A0=C2=A0=C2=A0 <b>for (int j=3D0;j < n;j++) v=3Dfu= nc1(n);</b><br> =C2=A0=C2=A0=C2=A0=C2=A0 c1 =3D clock();<br> =C2=A0=C2=A0=C2=A0=C2=A0 printf ("\tCPU =C2=A0time :%.2f s= ec", (float)(c1 - c0)/CLOCKS_PER_SEC);<br> =C2=A0=C2=A0=C2=A0=C2=A0 printf("\n\tThe value : %ld\n&quo= t;, =C2=A0v);<br> }<br> </div> _______________________________________________<br> python-uk mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"= noreferrer">[email protected]</a><br> <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" re= l=3D"noreferrer noreferrer" target=3D"_blank">https://mail.python.org/mailm= an/listinfo/python-uk</a><br> </blockquote> </div> <br clear=3D"all"> <div><br> </div> -- <br> <div dir=3D"ltr"> <div dir=3D"ltr">Life is a chess game - Anonymous.<br> </div> </div> <br> <fieldset></fieldset> <pre>_______________________________________________ python-uk mailing list <a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"noreferrer= ">[email protected]</a> <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" target=3D"_b= lank" rel=3D"noreferrer">https://mail.python.org/mailman/listinfo/python-uk= </a> </pre> </blockquote> <br> </div> _______________________________________________<br> python-uk mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank" rel=3D"noreferrer= ">[email protected]</a><br> <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" rel=3D"noref= errer noreferrer" target=3D"_blank">https://mail.python.org/mailman/listinf= o/python-uk</a><br> </blockquote></div> --00000000000030962f05d8d4b952-- --===============3878107664300450176== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ python-uk mailing list [email protected] https://mail.python.org/mailman/listinfo/python-uk --===============3878107664300450176==--