Compute pairwise differences between two vectors in numpy?



我有两个向量,我想构造一个它们的成对差的矩阵。目前我这样做:

import numpy as np
a = np.array([1,2,3,4])
b = np.array([3,2,1])
M = a.reshape((-1,1)) - b.reshape((1,-1))

这当然有效,但我想知道这是否真的是做事情的预期方式。这一行的可读性不够理想;人们必须思考一下reshape在做什么。这种情况可以改善吗?还有其他"清洁工"吗?实现相同目标的方法?

有一种有效的方法可以做到这一点,不需要您手动重塑,使用numpyufunc(通用函数)特征。每个ufunc,包括np.subtract,都有一个叫做outer的方法,它可以做你想做的事情。(文档)

outer将计算(在本例中为np.subtract)应用于所有对。

>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> b = np.array([3,2,1])
>>> M = np.subtract.outer(a, b)
>>> M
array([[-2, -1,  0],
[-1,  0,  1],
[ 0,  1,  2],
[ 1,  2,  3]])
>>>

让我们确认一下是否符合您的预期结果。

>>> # This is how `M` was defined in the question:
>>> M = a.reshape((-1,1)) - b.reshape((1,-1))
>>> M
array([[-2, -1,  0],
[-1,  0,  1],
[ 0,  1,  2],
[ 1,  2,  3]])

最新更新