2010-11-19 78 views
19

我在Python工作,我有一个NumPy阵列像这样:调整大小和拉伸NumPy的阵列

[1,5,9] 
[2,7,3] 
[8,4,6] 

如何它延伸到类似下面?

[1,1,5,5,9,9] 
[1,1,5,5,9,9] 
[2,2,7,7,3,3] 
[2,2,7,7,3,3] 
[8,8,4,4,6,6] 
[8,8,4,4,6,6] 

这些只是一些示例数组,我将实际调整几个大小的数组,而不仅仅是这些。

我是这个新手,我似乎无法将我的头围绕在我需要做的事情上。

回答

21

@ KennyTM的答案是非常光滑,真正适用于你的情况,但作为一种替代方案,可能提供多一点的灵活性,扩展阵列尝试np.repeat

>>> a = np.array([[1, 5, 9], 
       [2, 7, 3], 
       [8, 4, 6]]) 

>>> np.repeat(a,2, axis=1) 
array([[1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6]]) 

所以,这实现了沿重复一轴,让它沿多个轴(如你可能想),只是窝np.repeat电话:

>>> np.repeat(np.repeat(a,2, axis=0), 2, axis=1) 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 

你也可以改变重复FO数r任何初始行或列。例如,如果你想在每一行预留的两个重复从最后一行:

>>> np.repeat(a, [2,2,1], axis=0) 
array([[1, 5, 9], 
     [1, 5, 9], 
     [2, 7, 3], 
     [2, 7, 3], 
     [8, 4, 6]]) 

这里的时候,第二个参数是一个list它规定,在行(在这种情况下,行,因为axis=0)重复的每一行。

+0

https://docs.scipy。组织/ DOC/numpy的/参照/生成/ numpy.repeat.html – 2017-12-10 07:13:18

12
>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]]) 
>>> numpy.kron(a, [[1,1],[1,1]]) 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 
+2

万一有人在想,这是克罗内克产品:HTTP://docs.scipy。 org/doc/numpy/reference/generated/numpy.kron.html – krawyoti 2010-11-19 17:04:48

+0

就像这个答案一样酷,它需要两倍于dtlussier在我的机器上对大数组的回答中的重复方法 – 2012-12-28 01:00:38

1

不幸的是,numpy不允许小数步骤(据我所知)。这是一种解决方法。它并不像肯尼的解决方案聪明,但它利用传统索引:

>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]]) 
>>> step = .5 
>>> xstop, ystop = a.shape 
>>> x = numpy.arange(0,xstop,step).astype(int) 
>>> y = numpy.arange(0,ystop,step).astype(int) 
>>> mg = numpy.meshgrid(x,y) 
>>> b = a[mg].T 
>>> b 
array([[1, 1, 5, 5, 9, 9], 
     [1, 1, 5, 5, 9, 9], 
     [2, 2, 7, 7, 3, 3], 
     [2, 2, 7, 7, 3, 3], 
     [8, 8, 4, 4, 6, 6], 
     [8, 8, 4, 4, 6, 6]]) 

(dtlussier的解决方案是更好)