Re: C is it faster than numpy
Giorgio Zoppi <[email protected]> Fri, 25 Feb 2022 09:41:50 +0000
| Newsgroups | gmane.comp.python.org.uk |
|---|---|
| Message-ID | <CAHW5HkoQ=9Bvcm7L3CejpMedFezUf+ni+7NDms_RLeyq-VSnzg@mail.gmail.com> |
--===============8229259348071728419== Content-Type: multipart/alternative; boundary="000000000000ac63d805d8d48254" --000000000000ac63d805d8d48254 Content-Type: text/plain; charset="UTF-8" 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. --000000000000ac63d805d8d48254 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <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 alle ore 09:03 BELAHCENE Abdelkader <<a href=3D"mailto:= [email protected]">[email protected]</a>> ha scrit= to:<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, ye= s 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 explanatio= n ?<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, o= r 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 tempsE= xe.py=C2=A0 50000</b> <br>=C2=A0 sum with Python: 1250025000 and NumPy 1250= 025000<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&= quot;) ; 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()} ")<br>tm1=3Dit.= timeit(stmt=3Dfunc1, number=3Dn)<br>print(f"time used Python Sum: {rou= nd(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 Her= e 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 print= f("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", (floa= t)(c1 - c0)/CLOCKS_PER_SEC);<br>=C2=A0=C2=A0=C2=A0=C2=A0 printf("\n\tT= he 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"= class=3D"gmail_signature"><div dir=3D"ltr">Life is a chess game - Anonymou= s.<br></div></div> --000000000000ac63d805d8d48254-- --===============8229259348071728419== 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 --===============8229259348071728419==--