向量的每一对元素的Numpy减法



给定一个numpy数组,比如

x = np.array(
[[0],
[1],
[2]]
)

我想为x中的每一个可能的对a,b找到包含a-b的矩阵。即

[[0-0, 0-1, 0-2]
[1-0, 1-1, 1-2]
[2-0, 2-1, 2-2]]
==
[[ 0, -1, -2]
[+1,  0, -1]
[+2, +1,  0]]

为了提高效率,我避免使用for循环。

正如Michael所写,numpy广播可以帮助您做到这一点。如果您尝试对具有形状(3,1)的向量a和具有形状(1,3)的向量b执行操作,则下面的numpy会将其视为a的行在b的列和列之间重复,其中在行之间重复会导致您所描述的操作。

这就是为什么迈克尔告诉你把第一个向量的转置与它本身相减,以恢复你要求的结果。x-x.T

广播是好的,因为它通过大步来实现这一点,而且大多数时候使用较少的内存。

在更一般的情况下,ab的长度不相同。这里有更多详细信息:https://numpy.org/doc/stable/user/basics.broadcasting.html

相关内容

  • 没有找到相关文章

最新更新