裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

numba が速いってさ(Julia もほぼ同じ)

2021年02月14日 | ブログラミング

処理系ごとの計算所要時間(n は 外側の for ループの 10^n の n)

         n = 0    n = 1  n = 2  n = 3
numba    0.783    1.62   16.9   167
Julia    0.194    1.833  17.531 174.838
Fortran  0.866    8.638  97.865 ---
Java     2.298   25.903 249.377 ---
R       52.671  555.271 ---
Python 229.654 2794.784 ---

  • numba と Julia はいい勝負
  • Julia は Fortran より速い
  • Python おそっ!

プログラム

numba

from numba import jit

@jit
def hoge(n):
    count = 0
    i = 0
    for k0 in range(10**n):
        for k in range(10**9):
            i += 1
            if i >= 1000:
                count += 1
    return count

julia

function hoge(n)
    count = 0
    i = 0
    for k0 = 1:10^n
    for k = 1:10^9
        i += 1
        if i >= 1000
            count += 1
        end
    end
    end
    count
end

Fortran

program main
    implicit none
    integer(8) n, i, k, k0, count
    n = 0
    count = 0
    i = 0
    do k0 = 1, 10**n
        do k = 1, 10**9
            i = i+1
            if (i >= 1000) then
                count = count + 1
            end if
        end do
    end do
    write(*,*) n, count
end program main

Java

package hoge;

public class hogehoge {

    public static void main(String[] args) {
        long n, i, k, k0, count;
        long startTime = System.currentTimeMillis();
        n = 2;
        count = 0;
        i = 0;
        for (k0 = 1; k0 <= Math.pow(10, n); k0++) {
            for (k = 1; k <= Math.pow(10, 9); k++) {
                i += 1;
                if (i >= 1000) {
                    count += 1;
                }
            }
        }
        System.out.println(n+", "+count);
        long endTime = System.currentTimeMillis();
        System.out.println("処理時間:" + (endTime - startTime) + " ms");
    }
}

R

hoge = function(n) {
    count = 0
    i = 0
    for (k0 in 1:10^n) {
        for (k in 1:10^9) {
            i = i+1
            if (i >= 1000) {
                count = count + 1
            }
        }
    }
    count
}

Python

def hoge(n):
    count = 0
    i = 0
    for k0 in range(10**n):
        for k in range(10**9):
            i += 1
            if i >= 1000:
                count += 1
    return count

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« リスト内包表記は,リストし... | トップ | Python のリスト内包表記につ... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事