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 &lt;<a href=3D"mailto:=
[email protected]">[email protected]</a>&gt; 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&#39;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&#39;m wrong. Anyway here is an example Let&#39;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 (&quot;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&quot;sum with Python: {func1()} and NumPy {func2()} &quot;)<br>tm1=3Dit.=
timeit(stmt=3Dfunc1, number=3Dn)<br>print(f&quot;time used Python Sum: {rou=
nd(tm1,2)} sec&quot;)<br>tm2=3Dit.timeit(stmt=3Dfunc2, number=3Dn)<br>print=
(f&quot;time used =C2=A0Numpy Sum: {round(tm2,2)} sec&quot;)<br><br>and Her=
e the C program:<br>#include &lt;time.h&gt;<br>#include &lt;stdio.h&gt;<br>=
#include &lt;stdlib.h&gt;<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&lt;=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 &lt; 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(&quot;Please give an argument&quot;);<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 &lt; 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 (&quot;\tCPU =C2=A0time :%.2f sec&quot;, (floa=
t)(c1 - c0)/CLOCKS_PER_SEC);<br>=C2=A0=C2=A0=C2=A0=C2=A0 printf(&quot;\n\tT=
he value : %ld\n&quot;, =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==--