网格状函数,用于3D数组列表

时间:2019-05-15 12:52:24

标签: python numpy

我希望能够计算n维点列表(或数组)之间的成对距离。我想计算起点列表到目的地之间的距离矩阵。

我尝试了np.meshgrid,但并没有得到我想要的东西。可能我用错了。

图像我有点[x1,...,xn][y1,...,y_n],我想构造成对矩阵[[(x1,y1), .... , (x_n, y1)], ...., [(x_1, y_n), ...,(x_n, y_n)]。也可以是两个包含xs和ys的矩阵。

n=2 %number of points
d=3 %dimesion of points

X = np.random.random((d, n))
Y = np.random.random((d, n))
xv, yv = np.meshgrid(X,Y)

xv.shape
>>(6,6)  %here I would like to obtain a 3x2x2 matrix

解决方案可能是一些广播魔术...

1 个答案:

答案 0 :(得分:0)

这是我找到的解决方案:

X1 = np.array([[1,2,3], [4,5,6]])
X2 = np.array([[7,8,9], [10,11,12]])

xv, yv = np.repeat(X1, 2).reshape(3,2,2), np.repeat(X2, 2).reshape(3,2,2).transpose((0,2,1))

给出:

xv
>>array([[[1, 1],
        [2, 2]],

       [[3, 3],
        [4, 4]],

       [[5, 5],
        [6, 6]]])
yv
>>array([[[ 7,  8],
        [ 7,  8]],

       [[ 9, 10],
        [ 9, 10]],

       [[11, 12],
        [11, 12]]])

获得所需的矩阵:

np.stack([xv, yv]).shape
>>
(2, 3, 2, 2)