调整和拉伸NumPy数组
我正在使用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]
这些只是一些示例数组,实际上我会调整多个不同大小的数组,而不仅仅是这些。
我对这个还很陌生,真的搞不清楚我需要做些什么。
3 个回答
2
很遗憾,numpy不支持分数步长(就我所知是这样)。不过这里有个解决办法。虽然这个方法没有Kenny的聪明,但它使用了传统的索引方式:
>>> 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的解决方案更好)
19
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能不太好用,或者出现了错误。这种时候,我们就需要去查找解决办法,或者看看别人是怎么处理类似问题的。
有些人会在网上的技术论坛,比如StackOverflow,提问,寻求帮助。其他人则会分享他们的经验和解决方案。这种交流可以帮助大家更快地解决问题,学到新知识。
总之,编程的过程中,遇到问题是很正常的,重要的是要积极寻找答案,并与他人分享自己的发现。
>>> 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]])
48
@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
表示按行操作)。