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

在Matlab中将一个数据集缩放到另一个数据集,matlab,scaling,curve,Matlab,Scaling,Curve,我有两个数据集,它们是来自两个图像(dat1和dat2)的特定度量。我希望两个图像有相同的反应。“理想”图像应类似于第一个数据集(dat1) 但真实图像看起来像第二个数据集(dat2) 我想尝试将第二个数据集“适配”到第一个数据集。如何使用Matlab缩放dat2,使其看起来像dat1? 我尝试用不同的多项式、指数或高斯拟合dat1,然后使用我找到的系数拟合dat2,但程序失败,拟合不正确,它给了我一条直线。当我尝试使用相同的形状来拟合dat2时,允许系数是自由的,那么程序不会给我理想的形状

我有两个数据集,它们是来自两个图像(dat1和dat2)的特定度量。我希望两个图像有相同的反应。“理想”图像应类似于第一个数据集(dat1)

但真实图像看起来像第二个数据集(dat2)

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


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

通常,在这种情况下,一种非常常见的方法是规范化
0
1
之间的所有向量(区间
[0,1]
,包括两个极端)。这可以通过以下方式轻松实现:

dat1_norm = rescale(dat1);
dat2_norm = rescale(dat2);
function x = rescale(x)
    x = x - min(x);
    x = x ./ max(x);
end
如果Matlab版本大于或等于
2017b
,则默认情况下已包含该函数。否则,可定义如下:

dat1_norm = rescale(dat1);
dat2_norm = rescale(dat2);
function x = rescale(x)
    x = x - min(x);
    x = x ./ max(x);
end
为了实现您提到的目标(根据
dat2
的最小值和最大值重新缩放
dat1
),您可以按照他的评论中所述进行操作:

dat2_scaled = rescale(dat2,min(dat1),max(dat1));
但这是一个很好的解决方案,只要你能识别出具有更大尺度的向量。否则,风险在于根据较大向量的值重新缩放较小向量。这就是为什么我建议的第一种方法可能是一种更舒适的解决方案

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

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

您正在寻找类似dat2_scaled=rescale(dat2,min(dat1),max(dat1))的东西吗?谢谢,我没有注意到这个命令!