numpy.zeros方法中的这个参数是什么意思?

时间:2015-10-25 22:07:16

标签: python numpy

我有这段代码,我发现很难理解定义numpy.zeros方法的优点是什么,如下所示。

Z = np.zeros((10,10), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10),
                         np.linspace(0,1,10))

print(Z)

提及xy有什么意义?

3 个答案:

答案 0 :(得分:3)

这实际上定义了两个单独的ndarray,一个名为'x',另一个名为'y'。虽然在这种情况下,没有必要指定dtype s,但这是一种创建此类型的双ndarray的方法。

虽然numpy.zeros documentation中未明确包含此用法,但它们确实显示了使用它的示例。

编辑:

@WarrenWeckesser链接了一些documentation for these structured arrays

答案 1 :(得分:3)

zeros创建一个(10,10)数组,其中每个元素都由dtype定义np.dtype([('x',float),('y',float)])。也就是说,每个元素由2个浮点数组成,一个称为“x”,另一个称为“y”。

Z = np.zeros((10,10), [('x',float),('y',float)])

从某种意义上说,这会产生(10,10,2)数组,但2维度和其他维度之间存在“墙”。例如,您不能将其与其他尺寸交换。但是可以将它“视为”(10,10,2)数组:

Z.view('float').reshape(10,10,2)

Z的2个字段编号为Z['x']Z['y'],结果视图为(10,10)个数组。

第二行设置这两个字段的值

Z['x'], Z['y'] = np.meshgrid ...

通常meshgrid会返回2个数组,X, Y = np.meshgrid...。所以这只是一个普通的Python任务。

之前我还没有看过结构化数组和meshgrid的这种配对,但它有意义。是否它在另一件事上是有用的。

我打算添加一个Z看起来像的例子,但是@AndreL为我们做了这个。请注意,元素Z显示为tuples,表示它们与3d数组的2个元素列不同。

答案 2 :(得分:1)

输出的秘密在numpy.linspace(0,1,10),输出一个numpy.array,其中包含:

[ 0.          0.11111111  0.22222222  0.33333333  0.44444444  0.55555556
  0.66666667  0.77777778  0.88888889  1.        ]

对于'x'形状,对于'y',其中'0'是开始的位置,'1'是停靠的地方,10个样本。

numpy.zeros()为'ij'建立索引定义矩阵形状(M,N),其中M = N = 10

numpy.meshgrid()linspace的值结果汇总到矩阵中,例如 ai,aj

e.g。

Z = np.zeros((10,10), [('x',int),('y',int)])
Z['x'], Z['y'] = np.meshgrid( np.linspace(0,10,10), np.linspace(0,10,10))
print Z

输出:

[[(0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 0) (10, 0)]
 [(0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (5, 1) (6, 1) (7, 1) (8, 1) (10, 1)]
 [(0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (5, 2) (6, 2) (7, 2) (8, 2) (10, 2)]
 [(0, 3) (1, 3) (2, 3) (3, 3) (4, 3) (5, 3) (6, 3) (7, 3) (8, 3) (10, 3)]
 [(0, 4) (1, 4) (2, 4) (3, 4) (4, 4) (5, 4) (6, 4) (7, 4) (8, 4) (10, 4)]
 [(0, 5) (1, 5) (2, 5) (3, 5) (4, 5) (5, 5) (6, 5) (7, 5) (8, 5) (10, 5)]
 [(0, 6) (1, 6) (2, 6) (3, 6) (4, 6) (5, 6) (6, 6) (7, 6) (8, 6) (10, 6)]
 [(0, 7) (1, 7) (2, 7) (3, 7) (4, 7) (5, 7) (6, 7) (7, 7) (8, 7) (10, 7)]
 [(0, 8) (1, 8) (2, 8) (3, 8) (4, 8) (5, 8) (6, 8) (7, 8) (8, 8) (10, 8)]
 [(0, 10) (1, 10) (2, 10) (3, 10) (4, 10) (5, 10) (6, 10) (7, 10) (8, 10)
  (10, 10)]]

输出矩阵ij标量。

检查下一个网址:

  1. numpy.linspace()
  2. numpy.zeros()
  3. numpy.meshgrid()