是否有一个多维版本的arange/linspace?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我想要一个2d numpy数组(x,y)的列表,其中每个x都在{-5,-4.5,-4,-3.5,…,3.5,4,4.5,5}中,而y是相同的。

我可以

x = np.arange(-5, 5.1, 0.5)
y = np.arange(-5, 5.1, 0.5)

然后遍历所有可能的配对,但我相信还有更好的方法。

我想要一些看起来像:

[[-5, -5],
 [-5, -4.5],
 [-5, -4],
 ...
 [5, 5]]

顺序并不重要。

提问于
用户回答回答于

你可以用np.mgrid为此,它通常比np.meshgrid因为它在一个步骤中创建数组:

import numpy as np
X,Y = np.mgrid[-5:5.1:0.5, -5:5.1:0.5]

对于类似于linspace的功能,请替换步骤(即0.5)与复数它的大小指定了您希望在系列中的点数。使用此语法,与上述相同的数组指定如下:

X, Y = np.mgrid[-5:5:21j, -5:5:21j]

然后,您可以创建您的对如下:

xy = np.vstack((X.flatten(), Y.flatten())).T

这一切都可以用一行来完成:

xy = np.mgrid[-5:5.1:0.5, -5:5.1:0.5].reshape(2,-1).T

用户回答回答于

可以使用np.meshgrid:

import numpy as np
x = np.arange(-5, 5.1, 0.5)
y = np.arange(-5, 5.1, 0.5)
X,Y = np.meshgrid(x,y)

您可以将其转换为所需的输出。

XY=np.array([X.flatten(),Y.flatten()]).T

print XY
array([[-5. , -5. ],
       [-4.5, -5. ],
       [-4. , -5. ],
       [-3.5, -5. ],
       [-3. , -5. ],
       [-2.5, -5. ],
       ....
       [ 3. ,  5. ],
       [ 3.5,  5. ],
       [ 4. ,  5. ],
       [ 4.5,  5. ],
       [ 5. ,  5. ]])

扫码关注云+社区