numpy 如何使用python将np.meshgrid生成的x和y配对?

hl0ma9xz  于 2023-03-23  发布在  Python
关注(0)|答案(2)|浏览(226)

我想用python生成一个二维坐标矩阵。
我在用

x=np.linespace(min, max, step)
y=np.linespace(min, max, step)
X, Y = np.meshgrid(x, y)

以生成x和y坐标,其中X为:

[[0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]]

并且Y像:

[[-2. -2. -2. -2. -2.]
 [-1. -1. -1. -1. -1.]
 [ 0.  0.  0.  0.  0.]
 [ 1.  1.  1.  1.  1.]
 [ 2.  2.  2.  2.  2.]
 [ 3.  3.  3.  3.  3.]
 [ 4.  4.  4.  4.  4.]
 [ 5.  5.  5.  5.  5.]]

我想得到:

[[[0, -2] [0, -1] [0, 0] [0, 1] [0, 2]]
 [[1, -2] [1, -1] [1, 0] [1, 1] [1, 2]]
 [[2, -2] [2, -1] [2, 0] [2, 1] [2, 2]]
 [[3, -2] [3, -1] [3, 0] [3, 1] [3, 2]]
 [[4, -2] [4, -1] [4, 0] [4, 1] [4, 2]]]

(or它的水平镜子)怎么做?

ghhkc1vu

ghhkc1vu1#

你可以使用np.stacknp.concatenate的变体)来连接这两个数组-在任何轴上。np.stack((X,Y),axis=0)np.array((X,Y))一样将在一个新的前导维度(2,8,6)形状上连接它们。但显然你认为一个新的尾随维度是最好的,所以它需要axis=2
您的XY显然是通过以下命令生成的:

In [86]: X, Y = np.meshgrid(np.arange(0,6), np.arange(-2,6))

这是两个(8,6)数组。示例输出是(5,5),但布局看起来像是(6,8,2)数组的一部分,需要转置:

In [87]: np.stack((X.T,Y.T),axis=2)
Out[87]: 
array([[[ 0, -2],
        [ 0, -1],
        [ 0,  0],
        [ 0,  1],
        [ 0,  2],
        [ 0,  3],
        [ 0,  4],
        [ 0,  5]],

       [[ 1, -2],
        [ 1, -1],
        [ 1,  0],
        [ 1,  1],
        [ 1,  2],
        [ 1,  3],
        [ 1,  4],
        [ 1,  5]],
      ....

事实上,你可以在第一个轴上连接它们,然后转置:

np.array((X,Y)).T

无论如何,如果你不喜欢这个形状,你可以随意修改输入数组和axis

biswetbf

biswetbf2#

你可以这样实现:

#!/usr/bin/env ipython
# ---------------------------
import numpy as np
x0,x1 = -2, 2
y0,y1 = 0,4
x=np.arange(x0,x1, 1)
y=np.arange(y0,y1, 1)
X, Y = np.meshgrid(x, y)
ny,nx = np.shape(X)
# -----------------------------------------------------------
ans = [[[X[jj,ii],Y[jj,ii]] for ii in range(nx) ] for jj in range(ny)]

我切换到np.arange而不是np.linspace

相关问题