6

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()

操作をブロードキャストする時間のプロット

ここに画像の説明を入力

4

2 に答える 2