计算 numpy 中两个向量之间的成对差异?

Flo*_*ian 4 python 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))
Run Code Online (Sandbox Code Playgroud)

这当然有效,但我想知道这是否真的是预期的做事方式。该行的可读性不佳;人们必须想一想他们在reshape做什么。这可以改进吗?是否有另一种“更清洁”的方式来实现相同的目标?

Ary*_*thy 9

有一种有效的方法可以做到这一点,不需要您使用numpys ufunc(通用函数)功能手动重塑。每个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]])
>>>
Run Code Online (Sandbox Code Playgroud)

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

>>> # 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]])
Run Code Online (Sandbox Code Playgroud)