1

私は3つのnumpy配列dm_w, dm_sdm_p. これらの配列を並行して反復処理する必要があります。以下のコードに示すように、チェック条件に基づいて計算を行います。

私のコードは小さな配列ではうまく機能しますが、大きな配列では時間がかかりすぎます。これを達成するには、効率的で高速な方法が必要です。専門家の意見が必要です。

私のコード:

prox_mat = []
for w_dist, s_dist, PI in zip(np.nditer(dm_w), np.nditer(dm_s), np.nditer(dm_p)):
    if PI == 0.0:
         proximity_score = ((w_dist + len(np.unique(dm_s) * s_dist)) / 
                           (dm_w.shape[0] * len(np.unique(dm_s))))
         prox_mat.append(proximity_score)
    else:
         proximity_score = ((w_dist + len(np.unique(dm_s) * s_dist)) / 
                           (dm_w.shape[0] * len(np.unique(dm_s)))) * log10(10 * PI)
         prox_mat.append(proximity_score)

ps = np.array(prox_mat)
ps = np.reshape(ps, dm_w.shape)
4

1 に答える 1

4

いくつかのこと。1 つは、の計算をnp.unique(dm_s)ループの外に出す必要があることです。さらに、次のようになります。

len(np.unique(dm_s) * s_dist) == len(np.unique(dm_s))

どちらがループから引き出されるべきか、それとも間違いです。いかなる場合でも..

forloop/append コンストラクトをベクトル化する必要があります。

dm_s_uniques = len(np.unique(dm_s))
logs = np.log10(10 * dm_p)
logs[logs == -np.inf] = 1
prox_mat = ((dm_w +  dm_s_uniques) / (dm_w.shape[0] * dm_s_uniques)) * logs

ps = np.reshape(ps, dm_w.shape)

マッピングしたみたい

于 2013-05-20T02:19:45.183 に答える