最近傍タイリングでNumPy配列をアップサンプリングする簡単な方法 [重複] 質問する

最近傍タイリングでNumPy配列をアップサンプリングする簡単な方法 [重複] 質問する

整数の2次元配列があります。中×N配列を拡張したいのですが(BM)x(BN)どこBは正方形タイルの辺の長さなので、入力配列の各要素は次のように繰り返されます。ビバ最終配列のブロック。以下はネストされた for ループの例です。もっと速い/組み込みの方法はありますか?

import numpy as np

a = np.arange(9).reshape([3,3])            # input array - 3x3
B=2.                                       # block size - 2  
A = np.zeros([a.shape[0]*B,a.shape[1]*B])  # output array - 6x6

# Loop, filling A with tiled values of a at each index
for i,l in enumerate(a):                   # lines in a
    for j,aij in enumerate(l):             # a[i,j]
        A[B*i:B*(i+1),B*j:B*(j+1)] = aij

結果 ...

a=      [[0 1 2]
         [3 4 5]
         [6 7 8]]

A =     [[ 0.  0.  1.  1.  2.  2.]
         [ 0.  0.  1.  1.  2.  2.]
         [ 3.  3.  4.  4.  5.  5.]
         [ 3.  3.  4.  4.  5.  5.]
         [ 6.  6.  7.  7.  8.  8.]
         [ 6.  6.  7.  7.  8.  8.]]

ベストアンサー1

一つの選択肢は

>>> a.repeat(2, axis=0).repeat(2, axis=1)
array([[0, 0, 1, 1, 2, 2],
       [0, 0, 1, 1, 2, 2],
       [3, 3, 4, 4, 5, 5],
       [3, 3, 4, 4, 5, 5],
       [6, 6, 7, 7, 8, 8],
       [6, 6, 7, 7, 8, 8]])

中間配列があるため少し無駄がありますが、少なくとも簡潔です。

おすすめ記事