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. ]])
答案 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. ]]])