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:
以下のように成功しました。計算内容は円周率を求めるものです。