我需要生成一个矩阵,比如A,这个矩阵的元素,比如a_{ij}=(x_i,y_j)代表这个点的坐标。我需要坐标信息来做进一步的计算。看来如果我能得到这个矩阵,下面的计算应该比我用双循环(i:0:len(x_i),j:0:len(y_j))来计算每个点更有效。坐标信息是微不足道的:
num_xmesh = nx
num_ymesh = ny
x_start = xs
x_end = xe
y_start = ys
y_end = ye
x_grid=np.linspace(x_start,x_end,num_xmesh)
y_grid=np.linspace(y_start,y_end,num_ymesh)
字符串
我想知道如何用numpy生成这种矩阵。
3条答案
按热度按时间8ulbf1ek1#
您可以使用
np.stack
堆叠np.meshgrid
返回的数组,以生成一个3D数组,其中前两个维度为“空间”坐标,最后一个维度为坐标值:字符串
osh3o9ms2#
根据您的特定要求调整num_xmesh、num_ymesh、x_start、x_end、y_start和y_end的值,以生成所需的坐标矩阵A。
字符串
nom7f22z3#
您可以考虑使用
np.indices
或np.mgrid
来生成不需要堆叠的单个数组:字符串
或
型
如果你想让坐标在最后一个维度而不是第一个维度,转置是必要的。现在还不清楚你打算如何使用这个网格,所以它可能根本没有必要。
对于这个问题,你可以使用广播来避免分配整个矩阵给开始。你可以索引/重塑你的原始网格数组,或者等价地使用
indices(..., sparse=True)
或ogrid
代替mgrid
。这种方法的优点是它只分配一个坐标数组一次,而不是先分配组件,然后将它们复制到结果缓冲区。这使得它更高效,可能也更快。对于小的例子来说,这不是瓶颈,但对于大的数组,你可能会注意到差异。