2017-09-14 116 views
3

我具有表示空間數據2維陣列numpy的。我需要提高其決議。我還需要在整個空間均勻分配值。例如,倍增一個numpy的陣列和均勻地分配值

的值會變成:

1.25 1.25

1.25 1.25

我看了imresize,但我不認爲插值的選項將爲此工作。也許還有另一種方式?如果可以的話,我想避免迭代行和列。任何幫助將不勝感激!謝謝!

回答

3

簡單地通過它的高度和寬度限定在塊元素的數目除以然後複製/展開。要複製,我們可以使用np.repeatnp.lib.stride_tricks.as_strided

隨着np.repeat -

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

隨着使用tile_arraynp.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]])