Python中差异矩阵,结果类似MATLAB的bsxfun

-1 投票
1 回答
781 浏览
提问于 2025-04-17 16:17

我有一个 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]])

应该是可以正常工作的。

撰写回答