サムネがコーヒーの記事は書きかけです。

Javaとpythonの速度比較(転置行列編)

今回はJavaとpythonの速度を転置行列を生成することで比較してみたいと思います。

Javaのバージョンとかpythonのバージョンとか実行マシンとか何も載せていないので、あくまで参考と思ってください。

比較方法

3000×4000行列を生成し、その転置行列を生成するまでの時間をナノ秒で計測する。

Python 通常配列

import time 
class Mat:
    def __init__(self,n,m) -> None:
        self.n = n
        self.m = m
        self.mat = [[i+1+j*self.n for i in range(self.n)] for j in range(self.m)]

    def transpose(self,):
        return [[self.mat[i][j] for i in range(len(self.mat))] for j in range(len(self.mat[0]))]

t0 = time.clock_gettime_ns(time.CLOCK_MONOTONIC)
mat = Mat(3000,4000)
A = mat.transpose()
t1 = time.clock_gettime_ns(time.CLOCK_MONOTONIC)
print(t1-t0)

実行結果

3101864000 (ns)

Python ndarray

import time 
import numpy as np
class Mat:
    def __init__(self,n,m) -> None:
        self.n = n
        self.m = m
        self.mat = [[i+1+j*self.n for i in range(self.n)] for j in range(self.m)]

    def transpose(self,):
        A = np.array(self.mat)
        return A.transpose()

t0 = time.clock_gettime_ns(time.CLOCK_MONOTONIC)

mat = Mat(3000,4000)
A = mat.transpose()

t1 = time.clock_gettime_ns(time.CLOCK_MONOTONIC)
print(t1-t0)

実行結果

2166542000(ns)

Java

Java + 2DArray

元から次元がわかっているので、高速な2DArrayを使用します。

public class Mat {
    int[][] array;
    int n;
    int m;

    public static void main(String[] args){
        double t0 = System.nanoTime();
        Mat mat = new Mat(3000,4000);
        mat.setArray();
        mat.transpose();
        double t1 = System.nanoTime();
        System.out.println(t1-t0);
        
    }

    public Mat(int n, int m){
        this.n = n;
        this.m = m;
        array = new int[m][n];
    }

    public void setArray(){
        for (int i = 0;i<n;i++){
            for (int j = 0;j<m;j++){
                array[j][i] = 1+j*n + i;
            }
        }
    }
    public void transpose(){
        int[][] tmpArray = new int[n][m];
        for (int i = 0;i<n;i++){
            for (int j = 0;j<m;j++){
                tmpArray[i][j] = array[j][i];
            }
        }
        array = tmpArray;


    }

    }

実行結果

6.8755125E7

pythonの通常配列の50倍くらい高速です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です