在Matlab中将一个数据集缩放到另一个数据集

时间:2018-05-01 17:11:54

标签: matlab scaling curve

我有两个数据集,它们是来自两个图像(dat1和dat2)的特定指标。我希望两个图像都有相同的响应。 “理想”图像应该看起来像第一个数据集(dat1)

enter image description here 但真实图像看起来像第二个数据集(dat2)。

enter image description here

我想尝试将第二个数据集“拟合”到第一个数据集。如何使用Matlab缩放dat2以使其看起来像dat1? 我试图将dat1与不同的多项式,指数或高斯拟合,然后使用我发现的系数适合dat2,但程序失败并且它不合适,它给了我一条直线零线。当我尝试使用相同的形状使dat2适合允许系数自由时,程序不会给我理想的形状,因为它遵循dat2的趋势。

有没有办法让数据集适合另一组数据而不是函数?

1 个答案:

答案 0 :(得分:1)

通常情况下,在这种情况下,一种非常常见的方法是将01之间的所有向量归一化(区间[0,1],包括两个极值)。这可以很容易地实现如下:

dat1_norm = rescale(dat1);
dat2_norm = rescale(dat2);

如果您的Matlab版本大于或等于2017b,则默认情况下已包含rescale功能。否则,它可以定义如下:

function x = rescale(x)
    x = x - min(x);
    x = x ./ max(x);
end

为了实现您提及的目标(根据dat1的最小值和最大值重新调整dat2),您可以按照@cemsazara在评论中说的那样继续:

dat2_scaled = rescale(dat2,min(dat1),max(dat1));

但这只是一个很好的解决方案,只要你能够先验地确定具有更大尺度的矢量。否则,风险是基于较大的矢量的值重新调整较小的矢量。这就是为什么我建议你的第一种方法可能是一个更舒适的解决方案。

为了采用第二种方法,如果您的Matlab版本小于2017b,您必须修改上面定义的自定义rescale函数,以便接受两个补充参数:

function x = rescale(x,mn,mx)
    if (nargin == 1)
        mn = min(x);
        mx = max(x);
    elseif ((nargin == 0) || (nargin == 2))
        error('Invalid number of arguments supplied.');
    end

    x = x - mn;
    x = x ./ mx;
end