栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

numpy:从给定范围生成组合的有效方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

numpy:从给定范围生成组合的有效方法

我认为您正在寻找的是

np.mgrid
。不幸的是,这会以与所需格式不同的格式返回数组,因此您需要进行一些后期处理:

a = np.mgrid[0:4, 0:4, 0:11]     # All points in a 3D grid within the given rangesa = np.rollaxis(a, 0, 4)         # Make the 0th axis into the last axisa = a.reshape((4 * 4 * 11, 3))   # Now you can safely reshape while preserving order

说明

np.mgrid
在N维空间中为您提供了一组网格点。让我尝试用一​​个较小的示例来说明这一点,以使事情更清楚:

>>> a = np.mgrid[0:2, 0:2]>>> aarray([[[0, 0],        [1, 1]],       [[0, 1],        [0, 1]]])

由于我指定了两组范围

0:2,0:2
,因此我得到了2D网格。什么
mgrid
返回是x的值和对应于在二维空间中的网格点(0,0),(0,1),(1,0)和(1,1)的y的值。
a[0]
告诉您四个点的x值是
a[1]
什么,并告诉您y值是什么。

但是,您真正想要的是我已经写出的实际网格点列表,而不是分别列出这些点的x和y值。首先的直觉是根据需要调整数组的形状:

>>> a.reshape((4, 2))array([[0, 0],       [1, 1],       [0, 1],       [0, 1]])

但是显然这是行不通的,因为它可以有效地重塑展平的数组(通过按顺序读取所有元素而获得的数组),而这并不是您想要的。

您要做的是向下看的 第三

a
,并创建一个数组:

[ [a[0][0, 0], a[1][0, 0]],  [a[0][0, 1], a[1][0, 1]],  [a[0][1, 0], a[1][1, 0]],  [a[0][1, 1], a[1][1, 1]] ]

上面写着“首先告诉我第一个点(x1,y1),然后第二个点(x2,y2),…”,依此类推。也许可以用一个数字更好地解释这一点。这是什么

a
样子:

     you want to read     in this direction      (0, 0)   (0, 1)        |        |        |        |        v        v          /        0--------0 +----> axis0 x-values |       /|       /|/|          |      / |      / |    axis1 / |               1--------1  |         L  |     |  |     |  | v          /     |  0-----|--1axis2 y-values |     | /      | /          |     |/       |/               0--------1     |        |     |        |     v        v   (1, 0)   (1, 1)

np.rollaxis
为您提供了一种方法。
np.rollaxis(a, 0, 3)
在上面的示例中,“将第0(或 最外 )轴设为最后(或 最内
)轴。(注意:此处实际上仅存在轴0、1和2。因此说:“将第0根轴发送到第3根轴)位置”是告诉python将第0个轴放在最后一个轴之后的一种方法。您可能还想阅读一下。

>>> a = np.rollaxis(a, 0, 3)>>> aarray([[[0, 0],        [0, 1]],       [[1, 0],        [1, 1]]])

这开始看起来像您想要的,除了有一个额外的数组维。我们想要合并尺寸0和1,以获得仅一个网格点数组。但是,既然展平的数组以您期望的方式读取,您就可以安全地对其重塑形状以得到所需的结果。

>>> a = a.reshape((4, 2))>>> aarray([[0, 0],       [0, 1],       [1, 0],       [1, 1]])

3D版本执行相同的操作,不同之处在于,我无法确定其数字,因为它采用4D格式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号