Python numpy非整数网格

Python numpy非整数网格,python,multidimensional-array,numpy,grid,points,Python,Multidimensional Array,Numpy,Grid,Points,我是numpy新手,正在尝试找到一种Pythonic:生成点的常规3D网格的方法 对于numpy,ndindex函数几乎可以实现我想要的功能,但我推测它只适用于整数 将numpy作为np导入 ind=np.ndindex2,2,1 我在印度: 普林蒂 >>>0, 0, 0 0, 1, 0 1, 0, 0 1, 1, 0 我基本上想要相同的东西,但是使用浮动来定义值 我定义了长方体的尺寸以及x、z和z细分的数量 让我们从创建x、y和z维线性空间开始 将numpy作为np导入 corner1=[0.

我是numpy新手,正在尝试找到一种Pythonic:生成点的常规3D网格的方法

对于numpy,ndindex函数几乎可以实现我想要的功能,但我推测它只适用于整数

将numpy作为np导入 ind=np.ndindex2,2,1 我在印度: 普林蒂 >>>0, 0, 0 0, 1, 0 1, 0, 0 1, 1, 0 我基本上想要相同的东西,但是使用浮动来定义值

我定义了长方体的尺寸以及x、z和z细分的数量

让我们从创建x、y和z维线性空间开始

将numpy作为np导入 corner1=[0.0,0.0,0.0] 角落2=[1.0,1.0,1.0] nx,ny,nz=5,3,7 xspace=np.linspacecorner1[0],corner2[0],nx yspace=np.linspacecorner1[1],corner2[1],纽约州 zspace=np.linspacecorner1[2],corner2[2],新西兰 现在,我应该如何组合这些,以得到网格中所有点的数组?
谢谢你抽出时间

我觉得你的问题有点困惑,因为ndindex返回一个生成器,但你似乎在要求一个n维数组。发电机非常简单:

>>> list(numpy.broadcast(*numpy.ix_(x, y, z)))
[(0.0, 0.0, 0.0),
 (0.0, 0.0, 1.0),
 (0.0, 0.5, 0.0),
 (0.0, 0.5, 1.0),
 (0.0, 1.0, 0.0),
 (0.0, 1.0, 1.0),
 (1.0, 0.0, 0.0),
 (1.0, 0.0, 1.0),
 (1.0, 0.5, 0.0),
 (1.0, 0.5, 1.0),
 (1.0, 1.0, 0.0),
 (1.0, 1.0, 1.0)]
要将其打包到一个数组中,您可以创建一个数组并对其进行重塑,记住值三元组是它自己的维度,因此在末尾有额外的3

>>> numpy.array(list(numpy.broadcast(*numpy.ix_(x, y, z)))).reshape((2, 3, 2, 3))
array([[[[ 0. ,  0. ,  0. ],
         [ 0. ,  0. ,  1. ]],

        [[ 0. ,  0.5,  0. ],
         [ 0. ,  0.5,  1. ]],

        [[ 0. ,  1. ,  0. ],
         [ 0. ,  1. ,  1. ]]],


       [[[ 1. ,  0. ,  0. ],
         [ 1. ,  0. ,  1. ]],

        [[ 1. ,  0.5,  0. ],
         [ 1. ,  0.5,  1. ]],

        [[ 1. ,  1. ,  0. ],
         [ 1. ,  1. ,  1. ]]]])

我发现你的问题有点让人困惑,因为ndindex返回一个生成器,但你似乎在要求一个n维数组。发电机非常简单:

>>> list(numpy.broadcast(*numpy.ix_(x, y, z)))
[(0.0, 0.0, 0.0),
 (0.0, 0.0, 1.0),
 (0.0, 0.5, 0.0),
 (0.0, 0.5, 1.0),
 (0.0, 1.0, 0.0),
 (0.0, 1.0, 1.0),
 (1.0, 0.0, 0.0),
 (1.0, 0.0, 1.0),
 (1.0, 0.5, 0.0),
 (1.0, 0.5, 1.0),
 (1.0, 1.0, 0.0),
 (1.0, 1.0, 1.0)]
要将其打包到一个数组中,您可以创建一个数组并对其进行重塑,记住值三元组是它自己的维度,因此在末尾有额外的3

>>> numpy.array(list(numpy.broadcast(*numpy.ix_(x, y, z)))).reshape((2, 3, 2, 3))
array([[[[ 0. ,  0. ,  0. ],
         [ 0. ,  0. ,  1. ]],

        [[ 0. ,  0.5,  0. ],
         [ 0. ,  0.5,  1. ]],

        [[ 0. ,  1. ,  0. ],
         [ 0. ,  1. ,  1. ]]],


       [[[ 1. ,  0. ,  0. ],
         [ 1. ,  0. ,  1. ]],

        [[ 1. ,  0.5,  0. ],
         [ 1. ,  0.5,  1. ]],

        [[ 1. ,  1. ,  0. ],
         [ 1. ,  1. ,  1. ]]]])
简单地说:

xyz = numpy.mgrid[0:3:0.1, 0:2:0.2, 0:1:0.5]
print xyz
array([[[[ 0. ,  0. ],
     [ 0. ,  0. ],
     [ 0. ,  0. ],
     ...,

    [[ 0.1,  0.1],
     [ 0.1,  0.1],
     [ 0.1,  0.1],
     ...,
    [[ 0.2,  0.2],
     [ 0.2,  0.2],
     [ 0.2,  0.2]]
    ...,
    [[ 2.9,  2.9],
     [ 2.9,  2.9],
     [ 2.9,  2.9],
    ...
   [[[ 0. ,  0. ],
     [ 0.2,  0.2],
     [ 0.4,  0.4],
     ...,
     [ 0. ,  0.5],
     [ 0. ,  0.5],
     [ 0. ,  0.5]]]])
简单地说:

xyz = numpy.mgrid[0:3:0.1, 0:2:0.2, 0:1:0.5]
print xyz
array([[[[ 0. ,  0. ],
     [ 0. ,  0. ],
     [ 0. ,  0. ],
     ...,

    [[ 0.1,  0.1],
     [ 0.1,  0.1],
     [ 0.1,  0.1],
     ...,
    [[ 0.2,  0.2],
     [ 0.2,  0.2],
     [ 0.2,  0.2]]
    ...,
    [[ 2.9,  2.9],
     [ 2.9,  2.9],
     [ 2.9,  2.9],
    ...
   [[[ 0. ,  0. ],
     [ 0.2,  0.2],
     [ 0.4,  0.4],
     ...,
     [ 0. ,  0.5],
     [ 0. ,  0.5],
     [ 0. ,  0.5]]]])

可能重复@mgilson,我想feedMe可能会问一些稍微不同的问题;ndindex返回生成器,而不是数组。但是问题不是100%清楚。如果你发现我的问题不清楚,很抱歉。接下来我需要阅读发电机方面的内容。可能是重复的@mgilson,我想feedMe可能会问一些稍微不同的问题;ndindex返回生成器,而不是数组。但是问题不是100%清楚。如果你发现我的问题不清楚,很抱歉。下一步我需要仔细阅读发电机。谢谢,森德尔。我现在有了下面的内容,这正是我想要的。a=listnp.broadcast*np.ixxspace,yspace,zspace:谢谢,senderle。我现在有了下面的内容,这正是我想要的。a=listnp.broadcast*np.ixxspace、yspace、zspace: