9

所以说我这样做

x = np.arange(0, 3)

这使

array([0, 1, 2])

但我能做什么

x = np.arange(0, 3)*repeat(N=3)times

要得到

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

3 回答 3

13

我最近看到了几个关于resize. 它不经常使用,但这是一种情况,它可以满足您的需求:

In [66]: np.resize(np.arange(3),3*3)
Out[66]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])

还有很多其他方法可以做到这一点。

In [67]: np.tile(np.arange(3),3)
Out[67]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
In [68]: (np.arange(3)+np.zeros((3,1),int)).ravel()
Out[68]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])

np.repeat不会以我们想要的方式重复

In [70]: np.repeat(np.arange(3),3)
Out[70]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])

但即使这样也可以修改(这有点高级):

In [73]: np.repeat(np.arange(3),3).reshape(3,3,order='F').ravel()
Out[73]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
于 2016-12-21T03:18:50.517 回答
4

编辑:请参阅下面的 hpaulj 的回答。坦率地说,它更好。

最简单的方法是转换回列表并使用:

list(np.arange(0,3))*3

这使:

>> [0, 1, 2, 0, 1, 2, 0, 1, 2]

或者如果你想要它作为一个numpy数组:

np.array(list(np.arange(0,3))*3)

这使:

>> array([0, 1, 2, 0, 1, 2, 0, 1, 2])
于 2016-12-21T03:06:02.670 回答
4

这个怎么样?

arr = np.arange(3)
res = np.hstack((arr, ) * 3)

输出

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

我想说的开销不大。

于 2016-12-21T06:28:25.280 回答