Meshgrid是Numpy中的N柱状矩阵(或其他)

时间:2017-02-26 14:42:12

标签: python arrays numpy datagrid

Python版:2.7

我有以下numpy 2d数组:

array([[ -5.05000000e+01,  -1.05000000e+01],
   [ -4.04000000e+01,  -8.40000000e+00],
   [ -3.03000000e+01,  -6.30000000e+00],
   [ -2.02000000e+01,  -4.20000000e+00],
   [ -1.01000000e+01,  -2.10000000e+00],
   [  7.10542736e-15,  -1.77635684e-15],
   [  1.01000000e+01,   2.10000000e+00],
   [  2.02000000e+01,   4.20000000e+00],
   [  3.03000000e+01,   6.30000000e+00],
   [  4.04000000e+01,   8.40000000e+00]])

如果我想找到第一列和第二列的所有组合,我会使用np.array(np.meshgrid(first_column, second_column)).T.reshape(-1,2)。因此,我会100*1 matrix获得10*10 = 100 data points。但是,我的矩阵可以包含3列,4列或更多列,因此我在使用此numpy函数时遇到问题。

问题:如何制作一个包含3+列的自动网格网格?

UPD :例如,我有初始数组:

[[-50.5 -10.5]
 [  0.    0. ]]

因此,我希望输出数组如下:

array([[-10.5, -50.5],
   [-10.5,   0. ],
   [  0. , -50.5],
   [  0. ,   0. ]])

或者这个:

array([[-50.5, -10.5],
   [-50.5,   0. ],
   [  0. , -10.5],
   [  0. ,   0. ]])

1 个答案:

答案 0 :(得分:1)

您可以在转置的数组版本上使用* operator,该版本按顺序解包这些列。最后,需要交换轴操作将输出网格数组合并为一个数组。

因此,一个通用的解决方案是 -

np.swapaxes(np.meshgrid(*arr.T),0,2)

示例运行 -

In [44]: arr
Out[44]: 
array([[-50.5, -10.5],
       [  0. ,   0. ]])

In [45]: np.swapaxes(np.meshgrid(*arr.T),0,2)
Out[45]: 
array([[[-50.5, -10.5],
        [-50.5,   0. ]],

       [[  0. , -10.5],
        [  0. ,   0. ]]])