我有两个向量,我想构建它们的成对差异的矩阵。目前我这样做:
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做什么。这可以改进吗?是否有另一种“更清洁”的方式来实现相同的目标?
有一种有效的方法可以做到这一点,不需要您使用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)
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |