{"id":285,"date":"2014-04-02T10:12:00","date_gmt":"2014-04-02T14:12:00","guid":{"rendered":"http:\/\/www.bioinfo.iric.ca\/?p=285"},"modified":"2017-05-01T10:27:06","modified_gmt":"2017-05-01T14:27:06","slug":"quest-ce-qui-est-le-plus-rapide","status":"publish","type":"post","link":"https:\/\/bioinfo.iric.ca\/fr\/quest-ce-qui-est-le-plus-rapide\/","title":{"rendered":"Qu&rsquo;est-ce qui est le plus rapide?"},"content":{"rendered":"<p>Bien souvent, nous faisons les choses par habitude.  Lorsque nous devenons confortables, nous avons tendance \u00e0 rester dans notre zone de confort et \u00e0 toujours faire les choses de la m\u00eame fa\u00e7on.  C&rsquo;est exactement la m\u00eame chose en programmation.   Jusqu&rsquo;au jour o\u00f9 le doute nous frappe.  Est-ce qu&rsquo;il y aurait un moyen plus rapide d&rsquo;effectuer cette t\u00e2che?  Lorsque ce jour viendra (si la dite t\u00e2che est en Python),  le module <code><a href=\"https:\/\/docs.python.org\/2\/library\/timeit.html\" target=\"_blank\">timeit<\/a><\/code> pourra vous aider!  Bien s\u00fbr, il existe d&rsquo;autres moyens de comparer des temps d&rsquo;ex\u00e9cution en Python.  J&rsquo;utilise d&rsquo;ailleurs tr\u00e8s souvent le module <a href=\"https:\/\/docs.python.org\/2\/library\/time.html\" target=\"_blank\">time<\/a>.  J&rsquo;initie un temps t0,  <code>t0 = time.time()<\/code>, j&rsquo;ex\u00e9cute ma t\u00e2che et j&rsquo;imprime le temps \u00e9coul\u00e9, <code>print time.time()-t0<\/code>.<\/p>\n<p>Le module <code>timeit<\/code> a l&rsquo;avantage d&rsquo;\u00eatre simple et de pouvoir \u00eatre appel\u00e9 de la ligne de commande.<\/p>\n<p>En me r\u00e9f\u00e9rant \u00e0 l&rsquo;exemple de <a href=\"http:\/\/www.pythoncentral.io\/time-a-python-function\/\" target=\"_blank\">Xiaonuo Gantan sur PythonCentral<\/a>, j&rsquo;ai rapidement \u00e9t\u00e9 capable de voir que la compr\u00e9hension de listes est encore la m\u00e9thode la plus rapide pour remplacer un caract\u00e8re dans des cha\u00eenes de caract\u00e8res. <\/p>\n<p>Voici le contexte : j&rsquo;utilise un <em>dataframe<\/em> pandas avec des noms de colonnes vraiment chaotiques.  Je veux donc remplacer tous les caract\u00e8res sp\u00e9ciaux rencontr\u00e9s puisque je dois par la suite convertir mon <em>dataframe<\/em> pandas en <em>dataframe<\/em> R.  J&rsquo;ai toujours utilis\u00e9 la compr\u00e9hension de listes pour faire \u00e7a, mais j&rsquo;ai r\u00e9cemment vu la m\u00e9thode <code>map<\/code> de pandas.  Je me suis donc demand\u00e9 si j&rsquo;utilisais la m\u00e9thode la plus rapide.<\/p>\n<p>Voici le code du test que j&rsquo;ai effectu\u00e9 : <\/p>\n<div class=\"python\" style=\"font-size: 12px;\">\n<pre>\r\n<code>\r\nimport re\r\n\r\ndef wrapper(func, *args, **kwargs):\r\n  def wrapped():\r\n    return func(*args, **kwargs)\r\n  return wrapped\r\n\r\ndef f1 (l) : \r\n  # Utilisation du module d'expressions r\u00e9guli\u00e8res \r\n  return[re.sub(r'=', 'eq', x, flags=re.IGNORECASE) for x in list(l)]\r\n\r\ndef f2 (l) : \r\n  # Utilisation de la fonction map et d'une condition \r\n  return l.map(lambda x: x.replace('=', 'eq') if isinstance(x, (str, unicode)) else x)\r\n\r\ndef f3 (l) : \r\n  # Utilisation de la fonction map \r\n  return l.map(lambda x: x.replace('=', 'eq'))\r\n\r\ndef f4 (l) : \r\n  # Utilisation de compr\u00e9hension de listes \r\n  return [x.replace('=', 'eq') for x in list(l)]\r\n\r\ndef f5 (l) : \r\n  # Utilisation d'une boucle \r\n  c = []\r\n  for e in l : \r\n    c.append(e.replace('=','eq'))\r\n  return c\r\n\r\nfs = [f1,f2,f3,f4,f5]\r\n\r\nfor f in fs : \r\n  wrapped = wrapper(f,df.columns)\r\n  print '%s : %.3f sec for 10000 iterations ' % (f.func_name, timeit.timeit(wrapped, number=10000))\r\n\r\n<\/code><\/pre>\n<\/div>\n<p>Et voici la sortie :<\/p>\n<div style=\"'font-size: 11px;\">\nf1 : 3.559 sec for 10000 iterations<br \/>\nf2 : 0.927 sec for 10000 iterations<br \/>\nf3 : 0.607 sec for 10000 iterations<br \/>\nf4 : 0.358 sec for 10000 iterations<br \/>\nf5 : 0.478 sec for 10000 iterations<\/p>\n<\/div>\n<p>La grande gagnante&#8230; f4! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bien souvent, nous faisons les choses par habitude. Lorsque nous devenons confortables, nous avons tendance \u00e0 rester dans notre zone de confort et \u00e0 toujours faire les choses de la m\u00eame fa\u00e7on. C&rsquo;est exactement la m\u00eame chose en programmation. Jusqu&rsquo;au jour o\u00f9 le doute nous frappe. Est-ce qu&rsquo;il y aurait un moyen plus rapide d&rsquo;effectuer cette t\u00e2che? Lorsque ce jour viendra (si la dite t\u00e2che est en Python), le module timeit pourra vous aider! Bien s\u00fbr, il existe d&rsquo;autres moyens <a href=\"https:\/\/bioinfo.iric.ca\/fr\/quest-ce-qui-est-le-plus-rapide\/\"> [&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[32,26],"tags":[],"class_list":["post-285","post","type-post","status-publish","format-standard","hentry","category-performance-fr-2","category-langage-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/comments?post=285"}],"version-history":[{"count":14,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/285\/revisions"}],"predecessor-version":[{"id":3335,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/posts\/285\/revisions\/3335"}],"wp:attachment":[{"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/media?parent=285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/categories?post=285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bioinfo.iric.ca\/fr\/wp-json\/wp\/v2\/tags?post=285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}