我有这段代码,我发现很难理解定义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)
提及x
和y
有什么意义?
答案 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
标量。
检查下一个网址: