Numpy randint 附加

Posted

技术标签:

【中文标题】Numpy randint 附加【英文标题】:Numpy randint appending 【发布时间】:2013-07-08 20:24:54 【问题描述】:

所以我用 numpy 命名的高度生成一个随机列表...

heights = random.randint(10, size=random.randint(20))

我将此列表用于测试目的,但我有一个条件,我需要在每次生成时将第一个数字附加到列表中。基本上我需要为生成的任何随机列表创建第一个数字的 2 个。 因此,如果列表如下所示:

[1 2 2 5 5 6 7 7 7 9] 

我需要它看起来像:

[1 2 2 5 5 6 7 7 7 9 1]

我尝试过使用

heights.append(heights[0])

但我得到一个错误。 这适用于列表,但不适用于 numpy:/

【问题讨论】:

random.randint(20) 可以是 0。所以 heights 可以是零长度。在这种情况下,您希望将什么项目(如果有)附加到 heights 【参考方案1】:

你可以使用

heights = np.random.randint(10, size=np.random.randint(1,21)); heights[-1] = heights[0]

预分配正确大小的数组比使用np.appendnp.concatenatenp.hstack 快得多:

In [100]: %timeit heights = np.random.randint(10, size=np.random.randint(1,21)); heights[-1] = heights[0]
100000 loops, best of 3: 1.93 us per loop

In [99]: %timeit heights = np.random.randint(10, size=np.random.randint(1,20)); heights = np.append(heights, heights[0])
100000 loops, best of 3: 6.24 us per loop

In [104]: %timeit heights = np.random.randint(10, size=np.random.randint(1,20)); heights = np.concatenate((heights, heights[0:1]))
100000 loops, best of 3: 2.74 us per loop

In [105]: %timeit heights = np.random.randint(10, size=np.random.randint(1,20)); heights = np.hstack((heights, heights[0:1]))
100000 loops, best of 3: 7.31 us per loop

【讨论】:

我需要为任何生成的随机列表创建第一个数字的 2,而不仅仅是我在示例中使用的那个。 在这种情况下,使用heights[-1] = heights[0] 有趣的是,concatenate 和 hstack 在时间上的差异如此之大,你知道为什么会这样吗? @ophion: np.concatenate 是 written entirely in C,而 np.hstack first calls some Python code。【参考方案2】:

您也可以使用np.concatenate()np.hsatck()

heights = np.concatenate((heights, heights[0:1]))

heights = np.hstack((heights, heights[0:1]))

【讨论】:

以上是关于Numpy randint 附加的主要内容,如果未能解决你的问题,请参考以下文章

numpy.random.randint

关于NumPy的常用函数random.randint

python--numpy生成正态分布数据及randint randn normal的使用

Numpy学习—np.random.randn()np.random.rand()和np.random.randint()

Numpy学习—np.random.randn()np.random.rand()和np.random.randint()

random.randint()与np.random.randint()的区别