python - 升级 numpy 数组并均匀分布值

标签 python arrays numpy

我有一个表示空间数据的二维 numpy 数组。我需要提高它的分辨率。我还需要在空间中均匀分布值。例如,值为

5

会变成:

1.25 1.25

1.25 1.25

我看过 imresize,但我认为插值选项对此不起作用。也许还有另一种方法?如果可以的话,我想避免迭代行和列。任何帮助将不胜感激!谢谢!

最佳答案

简单地除以由其高度和宽度定义的 block 中的元素数,然后复制/扩展。要复制,我们可以使用 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)

np.lib.stride_tricks.as_strided使用 tile_array -

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

sample 运行-

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]])

关于python - 升级 numpy 数组并均匀分布值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46215414/

相关文章:

python - 不使用库函数查找字符串中子字符串出现的次数

python - 将参数传递到 AWS CLI 命令

python - 对数据框中的列进行排序

python - 如何从 python 脚本在 linux 中设置用户密码?

python - opencv-python:不是一个numpy数组

python - 使用numpy和cv2处理大型二进制图像数组

c++ - 静态数组上的 memset

php - 使用 PHP 按姓氏对 CSV 文件进行排序

ios - 使用 Swift 2.0 从 Parse 检索数据

python - 使用时间相关数据 Python 进行快速傅立叶变换 (fft)