3
我具有表示空間數據2維陣列numpy的。我需要提高其決議。我還需要在整個空間均勻分配值。例如,倍增一個numpy的陣列和均勻地分配值
的值會變成:
1.25 1.25
1.25 1.25
我看了imresize,但我不認爲插值的選項將爲此工作。也許還有另一種方式?如果可以的話,我想避免迭代行和列。任何幫助將不勝感激!謝謝!
我具有表示空間數據2維陣列numpy的。我需要提高其決議。我還需要在整個空間均勻分配值。例如,倍增一個numpy的陣列和均勻地分配值
的值會變成:
1.25 1.25
1.25 1.25
我看了imresize,但我不認爲插值的選項將爲此工作。也許還有另一種方式?如果可以的話,我想避免迭代行和列。任何幫助將不勝感激!謝謝!
簡單地通過它的高度和寬度限定在塊元素的數目除以然後複製/展開。要複製,我們可以使用np.repeat
或np.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_array
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]])