2次元配列内に5ピクセル×5ピクセルの規則的なグリッドを作成する関数を記述しようとしています。 numpy.repeat
はちょうど同じ行に沿って繰り返されるので、私はnumpy.arange
とnumpy.repeat
のいくつかの組み合わせがそれをするかもしれないが、今まで私は運がなかったことを望んでいた。ここで2次元配列内に規則的なグリッドを作成するNumpyルーチン
は一例です:
はのは、私は形状(20, 15)
の2D配列内の5x5のグリッドをしたいとしましょう。私は単純にこれを達成するためにループやスライスを使用することができます実現が、私は非常に大きな配列にこれを適用することができ、私はそれのパフォーマンスが遅すぎるか、非現実的であろうと心配
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」を含むものの2つの解決策があります:http://stackoverflow.com/questions/7525214/how-to-scale-a-numpy-array – Brionius
投稿ここでの答えですが、リンクされた質問で使用されている同じメソッド@NPEが使用されています。 – jorgeca
@Brionius - numpy.kronは間違いなく働いた。あなたと@Mrの間にはパフォーマンスの違いがあると思いますか? Eの答えは? – Brian