我有几个粒子的2D位置(x,y)的数组。在Mathematica中,如果pos
是一个形状为(n,2)
的数组,其中n
是粒子的数量,那么我可以使用Outer[Subtract, pos, pos, 1]
,上面的数学代码的结果是一个n x n x 2
数组,这个矩阵的每个i,j元素都是(x_i - x_j, y_i - y_j)
运算的结果。
例如
pos = {{x1, y1}, {x2, y2}, {x3, y3}};
Outer[Subtract, pos, pos, 1]
给出
{
{{0, 0}, {x1 - x2, y1 - y2}, {x1 - x3, y1 - y3}}
,
{{-x1 + x2, -y1 + y2}, {0, 0}, {x2 - x3, y2 - y3}}
,
{{-x1 + x3, -y1 + y3}, {-x2 + x3, -y2 + y3}, {0, 0}}
}
它是一个3x3x2的阵列。然而,在python中,我无法获得类似的结果:
import numpy as np
pos = [[1, 2], [5, 6], [8, 9]]
print (np.subtract.outer(pos, pos).shape)
给出(3, 2, 3, 2)
,而np.subtract.outer(pos, pos)
是
array([[[[ 0, -1],
[-4, -5],
[-7, -8]],
[[ 1, 0],
[-3, -4],
[-6, -7]]],
[[[ 4, 3],
[ 0, -1],
[-3, -4]],
[[ 5, 4],
[ 1, 0],
[-2, -3]]],
[[[ 7, 6],
[ 3, 2],
[ 0, -1]],
[[ 8, 7],
[ 4, 3],
[ 1, 0]]]])
而对于类似的值,Mathemtica代码给出了我所需要的,即
{
{{0, 0}, {-4, -4}, {-7, -7}}
,
{{4, 4}, {0, 0}, {-3, -3}}
,
{{7, 7}, {3, 3}, {0, 0}}
}
https://stackoverflow.com/questions/51698356
复制相似问题