我正在尝试编写一个函数,该函数可以在二维数组内创建一个由5个像素组成的规则网格。我希望numpy.arange
和numpy.repeat
的组合可以做到这一点,但到目前为止我还没有运气,因为numpy.repeat
只会在同一行重复。Numpy常规在二维数组内创建规则网格
下面是一个例子:
比方说,我想形状(20, 15)
的二维阵列内的5×5格。它应该看起来像:
array([[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5],
[ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5],
[ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8],
[ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8],
[ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8],
[ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8],
[ 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8],
[ 9, 9, 9, 9, 9,10,10,10,10,10,11,11,11,11,11],
[ 9, 9, 9, 9, 9,10,10,10,10,10,11,11,11,11,11],
[ 9, 9, 9, 9, 9,10,10,10,10,10,11,11,11,11,11],
[ 9, 9, 9, 9, 9,10,10,10,10,10,11,11,11,11,11],
[ 9, 9, 9, 9, 9,10,10,10,10,10,11,11,11,11,11]])
我知道我可以简单地使用循环和切片做到这一点,但我可以将其应用到非常大的阵列和我担心的是,性能将是太慢或不切实际。
任何人都可以推荐一种方法来完成这个?
在此先感谢。
UPDATE:
所有提供的答案似乎运作良好。任何人都可以告诉我哪个最有效的用于大型数组?大数组我的意思是它可能是100000 x 100000
或更多与15 x 15
网格单元格大小。
这里有两个解决方案,一个涉及'numpy.kron',一个涉及'numpy.repeat':http://stackoverflow.com/questions/7525214/how-to-scale-a-numpy-array – Brionius
我发布了这里有一个答案,但事实证明,在你的链接问题中使用@NPE的方法是一样的。 – jorgeca
@Brionius - 'numpy.kron'绝对有效。你认为这和@Mr有很大的性能差异吗? E的回答? – Brian