numpy 配列内のベクトルのペアのすべての順列の違いを取得したい。
私の特定の使用例では、これらのベクトルはオブジェクトのリストの 3D 位置ベクトルです。
したがって、 、、およびが 3 次元ベクトルである配列r = [r1, r2, r3]
がある場合、次のものが必要です。r1
r2
r3
[[r1-r1 r1-r2 r1-r3]
[r2-r1 r2-r2 r2-r3]
[r3-r1 r3-r2 r3-r3]]
-
op が要素ごとにベクトルに適用される場所。
基本的に、これに相当するベクトル:
>>> 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)
配列を反復せずに上記を達成できますか?