我正在嘗試編寫一個函數,該函數可以在二維數組內創建一個由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