我想得到一个numpy数组中向量对的所有排列之间的差异。
在我的特定用例中,这些向量是对象列表的 3D 位置向量。
因此,如果我有一个数组r = [r1, r2, r3]
wherer1
和是 3 维向量,我想要以下内容r2
:r3
[[r1-r1 r1-r2 r1-r3]
[r2-r1 r2-r2 r2-r3]
[r3-r1 r3-r2 r3-r3]]
将-
操作按元素应用于向量的位置。
基本上,这个向量等价于:
>>> scalars = np.arange(3)
>>> print(scalars)
[0 1 2]
>>> result = np.subtract.outer(scalars, scalars)
>>> print(result)
[[ 0 -1 -2]
[ 1 0 -1]
[ 2 1 0]]
但是,该outer
函数似乎在减法之前使我的向量数组变平,然后对其进行整形。例如:
>>> vectors = np.arange(6).reshape(2, 3) # Two 3-dimensional vectors
>>> print(vectors)
[[0 1 2]
[3 4 5]]
>>> results = np.subtract.outer(vectors, vectors)
>>> print(results.shape)
(2, 3, 2, 3)
我期待的结果是:
>>> print(result)
[[[ 0 0 0]
[-3 -3 -3]]
[[ 3 3 3]
[ 0 0 0]]]
>>> print(result.shape)
(2, 2, 3)
我可以在不迭代数组的情况下实现上述目标吗?