2017-09-14 73 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]])