Re: C is it faster than numpy
BELAHCENE Abdelkader <[email protected]> Fri, 25 Feb 2022 17:22:22 +0100
| Newsgroups | gmane.comp.python.org.uk |
|---|---|
| Message-ID | <CABcwF5m284ON7nGNXGrFEdratBJawvMO4FWkataBWjPo-Oq61g@mail.gmail.com> |
--===============1060429038100189541== Content-Type: multipart/alternative; boundary="0000000000002897c505d8da1ba5" --0000000000002897c505d8da1ba5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, What do you mean? the python and C programs are not equivalent? Le ven. 25 f=C3=A9vr. 2022 =C3=A0 10:42, Giorgio Zoppi <giorgio.zoppi@gmail= .com> a =C3=A9crit : > 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 > --0000000000002897c505d8da1ba5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Hi,</div><div>What do you mean?</div><div>the python = and C programs are not equivalent?</div><div><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=A010:42, Giorgio Zoppi <<a href=3D"mailto:giorgio.= [email protected]">[email protected]</a>> a =C3=A9crit=C2=A0:<br></d= iv><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bord= er-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">Well,= <div>numpy is written in C :) Maybe your C is not the numpy equivalent?</di= v><div>Best Regards,</div><div>Giorgio</div></div><br><div class=3D"gmail_q= uote"><div dir=3D"ltr" class=3D"gmail_attr">Il giorno ven 25 feb 2022 alle = ore 09:03 BELAHCENE Abdelkader <<a href=3D"mailto:abdelkader.belahcene@e= nst.dz" target=3D"_blank">[email protected]</a>> ha scritto:<= br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e= x;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 f= aster 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 subject?<br></b>T= hanks a lot <br>Regards<br>Numpy implements vectorization for arrays, or I&= #39;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.p= y=C2=A0 50000</b> <br>=C2=A0 sum with Python: 1250025000 and NumPy 12500250= 00<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=A0tim= e :7.521730<br>=C2=A0 =C2=A0 The value : 1250025000 <br></b>---------------= -----------------------------<br><br>This is the Python3 program :<br><br>i= mport timeit as it<br>import numpy as np<br>import sys<br>try :<br> n=3Deva= l(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&q= uot;sum with Python: {func1()} and NumPy {func2()} ")<br>tm1=3Dit.time= it(stmt=3Dfunc1, number=3Dn)<br>print(f"time used Python Sum: {round(t= m1,2)} sec")<br>tm2=3Dit.timeit(stmt=3Dfunc2, number=3Dn)<br>print(f&q= uot;time used =C2=A0Numpy Sum: {round(tm2,2)} sec")<br><br>and Here th= e C program:<br>#include <time.h><br>#include <stdio.h><br>#inc= lude <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, c= har* argv[]){<br>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 clock_t c= 0, 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(&= quot;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=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", =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> _______________________________________________<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> --0000000000002897c505d8da1ba5-- --===============1060429038100189541== 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 --===============1060429038100189541==--