【问题标题】:numpy non-integer gridnumpy 非整数网格
【发布时间】:2012-06-14 17:33:09
【问题描述】:

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

使用 numpy,ndindex 函数几乎可以满足我的要求,但我认为它只适用于整数。

import numpy as np
ind=np.ndindex(2,2,1)
for i in ind:
    print(i)


>>>(0, 0, 0)
(0, 1, 0)
(1, 0, 0)
(1, 1, 0)

我基本上想要同样的东西,但使用浮点数来定义值。

我定义了一个盒子的尺寸以及 x、z 和 z 细分的数量。

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

import numpy as np
corner1 = [0.0, 0.0, 0.0]
corner2 = [1.0, 1.0, 1.0]

nx, ny, nz = 5, 3, 7

xspace = np.linspace(corner1[0], corner2[0], nx)
yspace = np.linspace(corner1[1], corner2[1], ny)
zspace = np.linspace(corner1[2], corner2[2], nz)

现在,我应该如何组合这些来为我提供网格中所有点的数组? 感谢您的时间!

【问题讨论】:

  • @mgilson,我认为 feedMe 的要求可能略有不同; ndindex 返回一个生成器,而不是一个数组。但问题并不是 100% 清楚。
  • 抱歉,如果您发现我的问题不清楚。接下来我需要阅读生成器。

标签: python multidimensional-array numpy grid points


【解决方案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. ]]]])

【讨论】:

  • 谢谢,发件人。我现在有以下内容可以满足我的要求。 a = list(np.broadcast(*np.ix_(xspace, yspace, zspace))) :)
【解决方案2】:

简单地说:

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]]]])

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多