我正在使用Python,我有一个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]
这些只是一些示例数组,我实际上将调整几个大小的数组,而不仅仅是这些。
我是新手,我似乎无法绕过我需要做的事情。
答案 0 :(得分:27)
@ 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]])
您还可以更改任何初始行或列的重复次数。例如,如果您希望除最后一行之外每行重复两次:
>>> 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
的行)。
答案 1 :(得分: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 :(得分: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的解决方案更好)