Python中差异矩阵,结果类似MATLAB的bsxfun
我有一个 Nx1 的数值向量。我想做的是创建一个 NxN 的矩阵,其中每个值表示第 i 个和第 j 个值之间的差异——有点像一个大的相关矩阵。我之前是用循环来实现这个,但我想找一种更优雅的方法,利用 Python 的向量化能力,因为这个向量可能会变得相当大。我知道网上有一些问题,但回答都比较抽象。
我该如何在 Python 中复制 MATLAB 的 bsxfun
函数呢?
我在 SE 上发了一个问题,想了解 bsxfun
的用法,这里有链接,但现在我需要在 Python 中做同样的事情。
1 个回答
3
我不太明白你想要什么,但numpy
的广播规则(可以在这里找到介绍)意味着大多数情况下,bsxfun
并不是必需的,因为它通常可以直接使用。例如,如果我理解你的意思,像下面这样的代码
>>> a = np.array([1,3,5,7,9])
>>> a - a[:,None]
array([[ 0, 2, 4, 6, 8],
[-2, 0, 2, 4, 6],
[-4, -2, 0, 2, 4],
[-6, -4, -2, 0, 2],
[-8, -6, -4, -2, 0]])
应该是可以正常工作的。