当前位置: 首页 > 知识库问答 >
问题:

如何将meshgrid的输出转换为相应的点阵列?

漆雕成弘
2023-03-14

我想创建一个与网格相对应的点列表。因此,如果我想创建一个从(0,0)(1,1)的区域网格,它将包含点(0,0)(0,1)(1,0)(1,0)

我知道这可以通过以下代码实现:

g = np.meshgrid([0,1],[0,1])
np.append(g[0].reshape(-1,1),g[1].reshape(-1,1),axis=1)

产生结果:

array([[0, 0],
       [1, 0],
       [0, 1],
       [1, 1]])

我的问题是双重的:

  1. 有更好的方法吗?
  2. 有没有办法将其推广到更高的维度?

共有3个答案

翟兴邦
2023-03-14

另一种方法是:

np.indices((2,2)).T.reshape(-1,2)

可以推广到更高的维度,例如:

In [60]: np.indices((2,2,2)).T.reshape(-1,3)
Out[60]:
array([[0, 0, 0],
       [1, 0, 0],
       [0, 1, 0],
       [1, 1, 0],
       [0, 0, 1],
       [1, 0, 1],
       [0, 1, 1],
       [1, 1, 1]])
姚培
2023-03-14

你的网格点总是积分的吗?如果是这样,您可以使用numpy。ndindex

print list(np.ndindex(2,2))

更高维度:

print list(np.ndindex(2,2,2))

不幸的是,这不符合OP的要求,因为不符合积分假设(从0开始)。我会留下这个答案,以防其他人正在寻找同样的东西,而这些假设是正确的。

另一种方法依赖于zip

g = np.meshgrid([0,1],[0,1])
zip(*(x.flat for x in g))

这部分可以很好地扩展到任意尺寸。不幸的是,np。meshgrid无法很好地扩展到多个维度,因此需要计算零件,或者(假设它工作正常),您可以使用此so答案创建自己的ndmeshgrid函数。

陶元凯
2023-03-14

我刚刚注意到numpy中的文档提供了一种更快的方法:

X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])

这可以很容易地推广到更多的维度使用链接的Meshgrid2函数和映射'ravel'到生成的网格。

g = meshgrid2(x, y, z)
positions = np.vstack(map(np.ravel, g))

对于每个轴上有1000个刻度的3D阵列,结果比zip方法快约35倍。

资料来源:http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html#scipy.stats.gaussian_kde

为了比较这两种方法,请考虑下面的代码段:

创建众所周知的刻度标记,这将有助于创建网格。

In [23]: import numpy as np

In [34]: from numpy import asarray

In [35]: x = np.random.rand(100,1)

In [36]: y = np.random.rand(100,1)

In [37]: z = np.random.rand(100,1)

定义mgilson链接到的网格网格函数:

In [38]: def meshgrid2(*arrs):
   ....:     arrs = tuple(reversed(arrs))
   ....:     lens = map(len, arrs)
   ....:     dim = len(arrs)
   ....:     sz = 1
   ....:     for s in lens:
   ....:        sz *= s
   ....:     ans = []
   ....:     for i, arr in enumerate(arrs):
   ....:         slc = [1]*dim
   ....:         slc[i] = lens[i]
   ....:         arr2 = asarray(arr).reshape(slc)
   ....:         for j, sz in enumerate(lens):
   ....:             if j != i:
   ....:                 arr2 = arr2.repeat(sz, axis=j)
   ....:         ans.append(arr2)
   ....:     return tuple(ans)

创建网格并为两个函数计时。

In [39]: g = meshgrid2(x, y, z)

In [40]: %timeit pos = np.vstack(map(np.ravel, g)).T
100 loops, best of 3: 7.26 ms per loop

In [41]: %timeit zip(*(x.flat for x in g))
1 loops, best of 3: 264 ms per loop
 类似资料:
  • 如何为新类别重新训练图像分类器中描述的脚本Retrain.py运行为 并生成输出文件。将此转换为

  • 在你读完整本书之前,请不要把它标为复制品。这是针对Swift 3的。 我有一些函数,这些函数具有Ints,Floats等参数。我想把readLine()的输出,并让Swift接受readLine()的输出作为这些类型,但不幸的是readLine()输出一个字符串?当我试图转换时,它告诉我它没有打开。我需要帮助。我使用Ubuntu 16.04。 例如,如果我有,我将如何用两个包含readLine()

  • 问题内容: 我的数据库中有一个表,我想运行一个查询,例如 但我希望mysql返回utf8编码。在mysql中有任何功能可以执行此类任务吗?那是什么? 问题答案: 您可以使用CAST和CONVERT在不同类型的编码之间切换。参见:http : //dev.mysql.com/doc/refman/5.0/en/charset- convert.html

  • 问题内容: 有没有办法在Golang中将XML([] byte)转换为JSON输出? 我有下面的功能在哪里,但我想经过一些操作后将此XML响应转换为JSON。我已经尝试过打包但没有成功: 我也在使用Go-restful软件包 问题答案: 如果需要使用未知结构将XML文档转换为JSON,则可以使用goxml2json。 范例: 注意:我是该库的作者。

  • 问题内容: PHP无法识别(由生成),但只能识别, 这个问题的一般解决方案是什么? 问题答案: 您可以删除不是数字或小数点的任何字符,并使用解析该字符: 并且如果数字不为小数点:

  • 问题内容: 点后如何将double转换为2? 例如: 我需要那个(在Java for Android中) 提前致谢 问题答案: x = Math.floor(x * 100) / 100;

  • 问题内容: 我在NumPy中有三个相同大小的正方形矩阵。我想将它们组合成块对角矩阵。 例: 做这个的最好方式是什么? 问题答案: scipy.linalg具有block_diag函数以自动执行此操作

  • 上下文 我相信我已经搜索了足够的关于这个话题,但还没有找到答案。如果你们有什么答案,请帮忙。 > 我正在尝试将图像作为输出发送给来自的服务调用。 这就是我挣扎的地方。我不知道该怎么做。我还没有发布任何示例代码,因为服务器端的代码非常简单,而且我还没有服务器端的任何代码。 Android端的示例代码