首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >调整和拉伸NumPy阵列的大小

调整和拉伸NumPy阵列的大小
EN

Stack Overflow用户
提问于 2010-11-19 23:20:35
回答 3查看 19.2K关注 0票数 34

我在Python中工作,我有一个NumPy数组,如下所示:

代码语言:javascript
复制
[1,5,9]
[2,7,3]
[8,4,6]

如何将其扩展为如下所示?

代码语言:javascript
复制
[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]

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

我在这方面是新手,而且我似乎不能完全理解我需要做什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-20 00:46:37

@KennyTM的答案非常巧妙,而且确实适用于您的情况,但作为一种替代方案,它可能会为扩展数组提供更多的灵活性,请尝试np.repeat

代码语言:javascript
复制
>>> 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调用:

代码语言:javascript
复制
>>> 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]])

您还可以更改任何初始行或列的重复次数。例如,如果除了最后一行之外,您希望每行重复两次:

代码语言:javascript
复制
>>> 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)。

票数 38
EN

Stack Overflow用户

发布于 2010-11-19 23:28:53

代码语言:javascript
复制
>>> 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]])
票数 19
EN

Stack Overflow用户

发布于 2010-11-20 00:53:21

不幸的是,numpy不允许使用小数步(据我所知)。这里有一个解决方法。它不像Kenny的解决方案那么聪明,但它利用了传统的索引:

代码语言:javascript
复制
>>> 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的解决方案更好)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4226386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档