2017-09-14 16 views
3

私は空間データを表す2次元の数値配列を持っています。私はその解決策を増やす必要があります。私はまた、スペース全体に値を均等に分配する必要があります。例えば、数値配列をアップスケーリングし、値を均等に分配する

の値はなる:

1.25 1.25

1.25 1.25

私はimresize見てきたが、私は補間オプションがないと思いますこれのために働く。多分別の方法がありますか?私は行と列を反復しないようにしたいと思います。どんな助けでも大歓迎です!ありがとうございました!

答えて

3

ブロックの高さと幅で定義された要素の数で単純に除算し、次に複製/展開します。複製するには、np.repeatまたはnp.lib.stride_tricks.as_stridedを使用できます。

def upscale_strided(a, h, w): 
    return tile_array(a/float(h*w), h, w) 

サンプル実行 - -

In [140]: a 
Out[140]: 
array([[ 7, 6, 9], 
     [ 6, 6, 10]]) 

In [141]: upscale_repeat(a, 2, 2) 
Out[141]: 
array([[ 1.75, 1.75, 1.5 , 1.5 , 2.25, 2.25], 
     [ 1.75, 1.75, 1.5 , 1.5 , 2.25, 2.25], 
     [ 1.5 , 1.5 , 1.5 , 1.5 , 2.5 , 2.5 ], 
     [ 1.5 , 1.5 , 1.5 , 1.5 , 2.5 , 2.5 ]]) 

In [142]: upscale_repeat(a, 2, 3) 
Out[142]: 
array([[ 1.17, 1.17, 1.17, 1. , 1. , 1. , 1.5 , 1.5 , 1.5 ], 
     [ 1.17, 1.17, 1.17, 1. , 1. , 1. , 1.5 , 1.5 , 1.5 ], 
     [ 1. , 1. , 1. , 1. , 1. , 1. , 1.67, 1.67, 1.67], 
     [ 1. , 1. , 1. , 1. , 1. , 1. , 1.67, 1.67, 1.67]]) 
np.lib.stride_tricks.as_stridedtile_arrayを使用して

def upscale_repeat(a, h, w): 
    return (a/float(h*w)).repeat(h, axis=0).repeat(h, axis=1) 

からnp.repeat

関連する問題