{"id":2318,"date":"2019-11-20T20:51:40","date_gmt":"2019-11-20T11:51:40","guid":{"rendered":"https:\/\/julialang.kr\/?p=2318"},"modified":"2019-11-20T20:54:36","modified_gmt":"2019-11-20T11:54:36","slug":"julia-julia-vs-python-numpy-performace-%eb%b9%84%ea%b5%90","status":"publish","type":"post","link":"https:\/\/julialang.kr\/?p=2318","title":{"rendered":"[Julia] Julia vs Julia numpy with PyCall vs python numpy performace \ube44\uad50"},"content":{"rendered":"\n<p>Pi\uac12\uc744 \uad6c\ud558\ub294 \uae30\ub2a5\uc744 \uc904\ub9ac\uc544\uc5d0\uc11c numy\ub97c \uc0ac\uc6a9\ud588\uc744 \ub54c, \uc904\ub9ac\uc544\ub85c \uad6c\ud604 \ud588\uc744 \ub54c, \ud30c\uc774\uc36c\uc5d0\uc11c \ud588\uc744 \ub54c \uc131\ub2a5\uc744 \ube44\uad50 \ud55c\ub2e4.<\/p>\n\n\n\n<p>Julia : v1.2.0<br>python : v3.7<\/p>\n\n\n\n<p><a href=\"https:\/\/frhyme.github.io\/python-lib\/python_interface_to_julia\/\">https:\/\/frhyme.github.io\/python-lib\/python_interface_to_julia\/<\/a> \uc0ac\uc774\ud2b8\uc758 \ub0b4\uc6a9\uc744 \ubcf4\uace0 \ucc38\uc870\ub97c \ud588\ub294\ub370 n \uac12\uc740 \ucd5c\ub300 15\uae4c\uc9c0 \uac00\ub2a5 \ud558\uba70 \uc774 \uc774\uc0c1 \ub118\uc5b4 \uac00\uba74 \ubb34\ud55c\ub300\uac00 \ub098\uc624\uae30 \ub54c\ubb38\uc5d0 15\uae4c\uc9c0 \ud55c\ub2e4. \ucc38\uc870 \uc0ac\uc774\ud2b8\uc5d0\uc11c\ub294 9 \uae4c\uc9c0\ub9cc \uc2dc\ud589 \ud588\uace0 \ucf54\ub4dc\ub97c \ub2e4\uc2dc \uc791\uc131\ud558\uc5ec \ud14c\uc2a4\ud2b8 \ud55c \uacb0\uacfc\ub294 \uc131\ub2a5\uc740 (1) \uc21c\uc218 \uc904\ub9ac\uc544 \ucf54\ub4dc &gt; (2) \ubca1\ud130\ub77c\uc774\uc988\ub4dc \uc904\ub9ac\uc544 \ucf54\ub4dc &gt; (3) \ud30c\uc774\uc36c \ucf54\ub4dc &gt; (4) \uc904\ub9ac\uc544\uc5d0\uc11c numpy \uc0ac\uc6a9 \uc21c\uc73c\ub85c \ub098\ud0c0 \ub09c\ub2e4.<\/p>\n\n\n\n<p>\uc704 \ub9c1\ud06c\uc5d0\uc11c \ube44\uad50\ud55c \uc131\ub2a5 \uc218\uce58\ub294 \uc798 \ubabb\ub41c \ubd80\ubd84\uc774 \uc788\ub290\ub370  function \uc744 \uc120\uc5b8\ud558\uace0 \ubc14\ub85c \uc774\uc5b4\uc11c \uc2e4\ud589\ud558\ub294 \ub370 \uae4c\uc9c0 \uac78\ub9b0 \uc2dc\uac04\uc744 \uce21\uc815 \ud588\ub294\ub370 \uc774\ub97c 1) function \uc120\uc5b8, 2) \ucd5c\ucd08 function \uc2e4\ud589\uc2dc \ucef4\ud30c\uc77c \ub418\ubbc0\ub85c \uba3c\uc800 \ud55c \ubc88 \uc2e4\ud589\ud6c4 3) \ub2e4\uc2dc function\uc744 \uc2e4\ud589\ud558\ub294\ub370 \uac78\ub9ac\ub294 \uc2dc\uac04\uc744 \uce21\uc815 \ud558\ub294 \uac83\uc774 \uc633\ub2e4.<\/p>\n\n\n\n<p>\uc544\ub798 \uc904\ub9ac\uc5b4 \ubc0f \ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \ucc38\uc870<\/p>\n\n\n\n<p><strong>\uc904\ub9ac\uc544 \ucf54\ub4dc<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using PyCall\n\n@pyimport numpy\n\nfunction compute_pi1(n=10)\n    r = numpy.sum(numpy.array([ 1\/(16^k)*( 4\/(8*k+1) - 2\/(8*k+4) - 1\/(8*k+5) - 1\/(8*k+6)) for k in range(0, stop=n-1)]))\n    # println(r)\nend\nfunction compute_pi1_1(n=10)\n    k = numpy.array([k for k in range(0, stop=n-1)])\n    r = numpy.sum(@. 1\/(16^k)*( 4\/(8*k+1)-2\/(8*k+4)-1\/(8*k+5)-1\/(8*k+6)))\n    # println(r)\nend\nfunction compute_pi2(n=10)\n    r = 0\n    for k in 0:n-1\n        r+= 1\/(16^k)*( 4\/(8k+1) - 2\/(8k+4) - 1\/(8k+5) - 1\/(8k+6))\n    end\n    # println(r)\nend\nfunction compute_pi3(n=10)\n  k = Float64[0:n-1;]\n  r = sum(@. 1\/(16^k)*(4\/(8k+1)-2\/(8k+4)-1\/(8k+5)-1\/(8k+6)))  \n  # println(r)\nend\ncompute_pi1(15)\ncompute_pi1_1(15)\ncompute_pi2(15)\ncompute_pi3(15)\nprintln(\"=======P1===========\")\n@time begin\n  compute_pi1(15)\nend\n@time begin\n  compute_pi1_1(15)\nend\nprintln(\"=======P2===========\")\n## pure julia \uc18d\ub3c4 \n@time begin\n    compute_pi2(15)\nend \nprintln(\"=======P3===========\")\n## julia \uc18d\ub3c4 \n@time begin\n    compute_pi3(15)\nend \n<\/code><\/pre>\n\n\n\n<p>\uc904\ub9ac\uc544 \uc2e4\ud589\uacb0\uacfc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>=======P1===========\n  0.000104 seconds (52 allocations: 3.156 KiB)  &lt;-- python numpy\uc0ac\uc6a9 - for loop\ubb38\n  0.000129 seconds (85 allocations: 3.672 KiB)  &lt;-- python numpy\uc0ac\uc6a9 - \ubca1\ud130\ub77c\uc774\uc988\n=======P2===========\n  0.000004 seconds (4 allocations: 160 bytes)    &lt;-- \uc21c\uc218\uc904\ub9ac\uc544\n=======P3===========\n  0.000006 seconds (7 allocations: 592 bytes)    &lt;-- \ubca1\ud130\ub77c\uc774\uc988\ub4dc \uc904\ub9ac\uc544<\/code><\/pre>\n\n\n\n<p><strong>\ud30c\uc774\uc36c \ucf54\ub4dc<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy\nimport time\ndef compute_pi(n=10):\n    return numpy.sum(numpy.array([ 1.\/(16^k)*( 4.\/(8.*k+1.) - 2.\/(8*k+4.) - 1.\/(8*k+5.) - 1.\/(8*k+6)) for k in range(0, n)]))\n\ncompute_pi(15)\n\nstart = time.time()\ncompute_pi(15)\nstop = time.time()\nprint(\"%.8f\" % (stop1 - start1,))<\/code><\/pre>\n\n\n\n<p>\ud30c\uc774\uc36c \uc2e4\ud589\uacb0\uacfc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0.00005984<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Pi\uac12\uc744 \uad6c\ud558\ub294 \uae30\ub2a5\uc744 \uc904\ub9ac\uc544\uc5d0\uc11c numy\ub97c \uc0ac\uc6a9\ud588\uc744 \ub54c, \uc904\ub9ac\uc544\ub85c \uad6c\ud604 \ud588\uc744 \ub54c, \ud30c\uc774\uc36c\uc5d0\uc11c \ud588\uc744 \ub54c \uc131\ub2a5\uc744 \ube44\uad50 \ud55c\ub2e4. Julia : v1.2.0python : v3.7 https:\/\/frhyme.github.io\/python-lib\/python_interface_to_julia\/ \uc0ac\uc774\ud2b8\uc758 \ub0b4\uc6a9\uc744 \ubcf4\uace0 \ucc38\uc870\ub97c \ud588\ub294\ub370 n \uac12\uc740 \ucd5c\ub300 15\uae4c\uc9c0 \uac00\ub2a5 \ud558\uba70 \uc774 \uc774\uc0c1 \ub118\uc5b4 \uac00\uba74 \ubb34\ud55c\ub300\uac00 \ub098\uc624\uae30 \ub54c\ubb38\uc5d0 15\uae4c\uc9c0 \ud55c\ub2e4. \ucc38\uc870 \uc0ac\uc774\ud2b8\uc5d0\uc11c\ub294 9 \uae4c\uc9c0\ub9cc \uc2dc\ud589 \ud588\uace0 \ucf54\ub4dc\ub97c \ub2e4\uc2dc \uc791\uc131\ud558\uc5ec \ud14c\uc2a4\ud2b8 \ud55c \uacb0\uacfc\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[25],"tags":[],"_links":{"self":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/2318"}],"collection":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2318"}],"version-history":[{"count":3,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/2318\/revisions"}],"predecessor-version":[{"id":2321,"href":"https:\/\/julialang.kr\/index.php?rest_route=\/wp\/v2\/posts\/2318\/revisions\/2321"}],"wp:attachment":[{"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/julialang.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}