ChatGPTにNumpyを使うのと使わないので速度比較するPythonコードを書いてもらった

ChatGPTにNumpyを使う場合と使わない場合の計算速度を比較するPythonコードを書いてもらいました。

 

指示文(プロンプト):

numpy を使った計算と、使わない場合の計算速度を比較するPythonコードを教えてください。

 

回答1:

numpy を使った計算と、使わない場合の計算速度を比較するPythonコードは、以下のようになります。


import numpy as np
import time

# numpy を使わない場合
def calc_without_numpy(n):
    x = [[i for i in range(n)] for j in range(n)]
    y = [[0 for i in range(n)] for j in range(n)]
    start = time.time()
    for i in range(n):
        for j in range(n):
            y[i][j] = x[i][j] + x[(i+1)%n][j] - x[(i+1)%n][(j+1)%n] * x[i][(j+1)%n]
    end = time.time()
    return end - start

# numpy を使う場合
def calc_with_numpy(n):
    x = np.arange(n*n).reshape((n,n))
    y = np.zeros((n,n))
    start = time.time()
    y = x + np.roll(x, -1, axis=0) - np.roll(x, -1, axis=1) * np.roll(x, -1, axis=(0,1))
    end = time.time()
    return end - start

# 計算速度を比較する
n = 10000 # 行列のサイズ
t1 = calc_without_numpy(n)
t2 = calc_with_numpy(n)
print(f"numpy を使わない場合: {t1:.3f}秒")
print(f"numpy を使う場合: {t2:.3f}秒")
print(f"numpy の方が {t1/t2:.2f}倍速い")
    
結果1:

以下のように成功しました。

回答2:

import numpy as np
import time

# numpy を使わない場合
def calc_pi_without_numpy(n):
    start = time.time()
    x = 0
    for i in range(1, n+1):
        x += 1 / i**2
    pi = (6 * x)**0.5
    end = time.time()
    return pi, end - start

# numpy を使う場合
def calc_pi_with_numpy(n):
    start = time.time()
    x = np.arange(1, n+1)
    y = np.sum(1 / x**2)
    pi = (6 * y)**0.5
    end = time.time()
    return pi, end - start

# 計算速度を比較する
n = 100000000 # 繰り返し回数
pi1, t1 = calc_pi_without_numpy(n)
pi2, t2 = calc_pi_with_numpy(n)
print(f"numpy を使わない場合: {pi1:.6f}, {t1:.3f}秒")
print(f"numpy を使う場合: {pi2:.6f}, {t2:.3f}秒")
print(f"numpy の方が {t1/t2:.2f}倍速い")
    
結果2:

以下のように成功しました。計算内容は円周率を求めるものです。

 \pi=\sqrt{6\sum_{k=1}^\infty \frac{1}{k^2}}