感谢Philip Cloud的伟大answer to a previous question ,我深入研究了 scikit 中 pairwise_distances
的源代码。
相关部分是:
def pairwise_distances(X, Y=None, metric="euclidean", n_jobs=1, **kwds):
if metric == "precomputed":
return X
elif metric in PAIRWISE_DISTANCE_FUNCTIONS:
func = PAIRWISE_DISTANCE_FUNCTIONS[metric]
if n_jobs == 1:
return func(X, Y, **kwds)
else:
return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
elif callable(metric):
# Check matrices first (this is usually done by the metric).
X, Y = check_pairwise_arrays(X, Y)
n_x, n_y = X.shape[0], Y.shape[0]
# Calculate distance for each element in X and Y.
# FIXME: can use n_jobs here too
D = np.zeros((n_x, n_y), dtype='float')
for i in range(n_x):
start = 0
if X is Y:
start = i
for j in range(start, n_y):
# distance assumed to be symmetric.
D[i][j] = metric(X[i], Y[j], **kwds)
if X is Y:
D[j][i] = D[i][j]
return D
如果我要计算如下的成对距离矩阵,是否正确理解:
matrix =pairwise_distances(foo, metric=lambda u,v: hasrsine(u,v), n_jobs= -1)
其中 haversine(u,v)
是一个计算两点之间的 Haversine 距离的函数,而该函数在 PAIRWISE_DISTANCE_FUNCTIONS
中没有,即使n_jobs= -1
,该计算也不会并行化?
我意识到#FIXME
评论似乎暗示了这一点,但我想确保我没有疯,因为没有抛出信息性警报来说明这一点似乎有点奇怪当您使用不在 PAIRWISE_DISTANCE_FUNCTIONS
中的可调用函数传递 n_jobs= -1
时,计算实际上不会并行化。
最佳答案
已确认。如果可调用对象不在 PAIRWISE_DISTANCE_FUNCTIONS
中,则将可调用对象作为指标
与 n_jobs= -1
一起传递将不会导致并行化。
关于python - scikit-learn 中的 n_jobs 并行化pairwise_distances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523542/