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

几件事。一,计算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 回答