【问题标题】:Array from interpolated plot in python来自python中插值图的数组
【发布时间】:2016-03-10 10:15:03
【问题描述】:

我有一个网格大小为 150x80 的数组。我绘制了数据并对其进行了插值。这是我的图:

这是我的问题:我想对插值数据进行一些计算,这就是为什么我需要将图像写回到一个数组中,其中包含更多细节。有可能吗?

----- 新编辑 -----

这是我的代码。如您所见,我在图中插入数据,因此实际上我没有可调用的插值,而是图像。

clip=abs(np.percentile(sint_h, 0.999))
fig, ax = plt.subplots(2,figsize=(10,10))
im0=ax[0].imshow(sint_h,extent=[0,sint_h.shape[1],sint_h.shape[0]*sr,0],interpolation='bilinear',aspect='auto',cmap='RdBu',vmin=-clip,vmax=clip)
im1=ax[1].imshow(specamps_h,extent=[0,specamps_h.shape[1],ufreq_range_h.max(),0],interpolation='bilinear',aspect='auto',cmap='rainbow')
ax[0].set_ylabel('TWT [s]')
ax[1].set_ylabel('FREQUENCY [Hz]')
ax[1].set_y

【问题讨论】:

    标签: python arrays matplotlib plot interpolation


    【解决方案1】:

    是的,这是可能的。插值返回一个callable,所以你可以用你想要的网格调用它:

    from scipy.interpolate import interp2d
    import numpy as np
    
    x = 50
    y = 150
    
    a = np.random.uniform(0,10,(y, x))
    b = interp2d(np.arange(x), np.arange(y), a)
    

    那只是为了创建一些测试数据。为了得到你想要的,你需要在你选择的网格上评估插值b

    upsample_factor = 2
    c = b(np.linspace(0,x,x*upsample), np.linspace(0,y,y*upsample))
    

    这会创建一个网格,其元素数量是原始数组的 2 倍。

    或者您可以在您感兴趣的区域周围定义一些框,并使用np.linspace 调用它并使用所需数量的元素。

    【讨论】:

    • 谢谢!这不是我想的那样,但它很有用!
    • 嗨,再次抱歉!我正在尝试使用您的脚本,但出了点问题...如果我在数据上使用 interp2d,则会收到错误“ValueError:x 和 y 对于非矩形网格必须具有相等的长度”
    • 只需使用np.arange(sint_h.shape[0])np.arange(sint_h.shape[1]) 作为interp2d 的参数。但我刚刚得到了你想要的……你想要 matplotlib 中的插值图像供以后使用?
    • 嗯...不完全...我想对插值进行一些计算...例如我需要找到 x value=8.5 的最大 y 值
    猜你喜欢
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2015-09-27
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多