2 つの 3D 配列で ">" の単純な操作をブロードキャストしようとしています。1 つは次元 (m, 1, n) を持ち、もう 1 つは (1, m, n) です。3 番目の次元 (n) の値を変更すると、計算速度が n に比例することを単純に期待できます。
ただし、これを明示的に測定しようとすると、n を 1 から 2 に増やすと計算時間が約 10 倍増加し、その後スケーリングは線形になります。
n=1 から n=2 にすると、計算時間が大幅に増加するのはなぜですか? numpy でのメモリ管理のアーティファクトであると想定していますが、詳細を探しています。
コードは、結果のプロットと共に以下に添付されています。
import numpy as np
import time
import matplotlib.pyplot as plt
def compute_time(n):
x, y = (np.random.uniform(size=(1, 1000, n)),
np.random.uniform(size=(1000, 1, n)))
t = time.time()
x > y
return time.time() - t
a = [
[
n, np.asarray([compute_time(n)
for _ in range(100)]).mean()
]
for n in range(1, 30, 1)
]
a = np.asarray(a)
plt.plot(a[:, 0], a[:, 1])
plt.xlabel('n')
plt.ylabel('time(ms)')
plt.show()
操作をブロードキャストする時間のプロット