Re: C is it faster than numpy
BELAHCENE Abdelkader <[email protected]> Fri, 25 Feb 2022 17:23:49 +0100
| Newsgroups | gmane.comp.python.org.uk |
|---|---|
| Message-ID | <CABcwF5mEaEDo6yagjXLnAvVvO0k=PxH2Jnjq5wTvoL9Y-STGMg@mail.gmail.com> |
--===============6168651675481276274== Content-Type: multipart/alternative; boundary="00000000000060ca0505d8da207c" --00000000000060ca0505d8da207c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks, But the different is very significant!!! so? Le ven. 25 f=C3=A9vr. 2022 =C3=A0 10:58, Edward Hartley <[email protected]= om> a =C3=A9crit : > > Hi, > Simply check the original Numpy aka Numerical Python docs where it=E2=80= =99s > comprehensively explained that the library is implemented in C with a thi= n > Python wrapper. The docs were written circa =E2=80=9898 by the original l= ibrary > author. The library was optimised over a long period before being release= d. > I=E2=80=99ve seen similar results when replacing an optimised Fortran lib= rary with > C/C++ the key is the effort given to optimisation, and care with avoiding > unnecessary memory allocation. > I=E2=80=99ll dig out the reference when I=E2=80=99ve tracked it down. > Best of Luck > Ed Hartley > > On 25 Feb 2022, at 09:42, Giorgio Zoppi <[email protected]> wrote: > > =EF=BB=BF > 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 th= an >> 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=3Deval(sys.argv[1]) >> except: >> print ("needs integer as argument") ; exit() >> >> a=3Drange(1,n+1) >> b=3Dnp.array(a) >> def func1(): return sum(a) >> def func2(): return np.sum(b) >> >> print(f"sum with Python: {func1()} and NumPy {func2()} ") >> tm1=3Dit.timeit(stmt=3Dfunc1, number=3Dn) >> print(f"time used Python Sum: {round(tm1,2)} sec") >> tm2=3Dit.timeit(stmt=3Dfunc2, number=3Dn) >> 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=3D0; >> for (int i=3D1; i<=3D n;i++) r+=3D 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=3Datoi(argv[1]); >> c0 =3D clock(); >> *for (int j=3D0;j < n;j++) v=3Dfunc1(n);* >> c1 =3D 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 list > [email protected] > https://mail.python.org/mailman/listinfo/python-uk > > _______________________________________________ > python-uk mailing list > [email protected] > https://mail.python.org/mailman/listinfo/python-uk > --00000000000060ca0505d8da207c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Thanks,</div><div>But the different is very significa= nt!!!</div><div>so?<br></div></div><br><div class=3D"gmail_quote"><div dir= =3D"ltr" class=3D"gmail_attr">Le=C2=A0ven. 25 f=C3=A9vr. 2022 =C3=A0=C2=A01= 0:58, Edward Hartley <<a href=3D"mailto:[email protected]">ed.hartley= @gmail.com</a>> a =C3=A9crit=C2=A0:<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"auto"><div dir=3D"ltr"></div><div dir=3D= "ltr"><br></div><div dir=3D"ltr">Hi,=C2=A0</div><div dir=3D"ltr">Simply che= ck the original Numpy aka Numerical Python docs where it=E2=80=99s comprehe= nsively explained that the library is implemented in C with a thin Python w= rapper. The docs were written circa =E2=80=9898 by the original library aut= hor. The library was optimised over a long period before being released. I= =E2=80=99ve seen similar results when replacing an optimised Fortran librar= y with C/C++ the key is the effort given to optimisation, and care with avo= iding unnecessary memory allocation.=C2=A0</div><div dir=3D"ltr">I=E2=80=99= ll dig out the reference when I=E2=80=99ve tracked it down.</div><div dir= =3D"ltr">Best of Luck</div><div dir=3D"ltr">Ed Hartley</div><div dir=3D"ltr= "><br><blockquote type=3D"cite">On 25 Feb 2022, at 09:42, Giorgio Zoppi <= ;<a href=3D"mailto:[email protected]" target=3D"_blank">giorgio.zoppi= @gmail.com</a>> wrote:<br><br></blockquote></div><blockquote type=3D"cit= e"><div dir=3D"ltr">=EF=BB=BF<div dir=3D"ltr">Well,<div>numpy is written in= C :) Maybe your C is not the numpy equivalent?</div><div>Best Regards,</di= v><div>Giorgio</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" c= lass=3D"gmail_attr">Il giorno ven 25 feb 2022 alle ore 09:03 BELAHCENE Abde= lkader <<a href=3D"mailto:[email protected]" target=3D"_blank= ">[email protected]</a>> ha scritto:<br></div><blockquote cla= ss=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&= #39;s not the case with numpy, I believe numpy is faster than C, at least i= n some cases.<br><b>Is there another explanation ?<br>Or where can find =C2= =A0a doc speaking =C2=A0about the subject?<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 sec</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 Pyth= on: {func1()} and NumPy {func2()} ")<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 (in= t =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 giv= e 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=3Dfunc1(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 sec", (float)(c1 - c0)/CLOCKS= _PER_SEC);<br>=C2=A0=C2=A0=C2=A0=C2=A0 printf("\n\tThe value : %ld\n&q= uot;, =C2=A0v);<br>}<br></div> _______________________________________________<br> python-uk mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">python-uk@python.= org</a><br> <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" rel=3D"noref= errer" target=3D"_blank">https://mail.python.org/mailman/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> <span>_______________________________________________</span><br><span>pytho= n-uk mailing list</span><br><span><a href=3D"mailto:[email protected]" t= arget=3D"_blank">[email protected]</a></span><br><span><a href=3D"https:= //mail.python.org/mailman/listinfo/python-uk" target=3D"_blank">https://mai= l.python.org/mailman/listinfo/python-uk</a></span><br></div></blockquote></= div>_______________________________________________<br> python-uk mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">python-uk@python.= org</a><br> <a href=3D"https://mail.python.org/mailman/listinfo/python-uk" rel=3D"noref= errer" target=3D"_blank">https://mail.python.org/mailman/listinfo/python-uk= </a><br> </blockquote></div> --00000000000060ca0505d8da207c-- --===============6168651675481276274== 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 --===============6168651675481276274==--