我有两个数据集,它们是来自两个图像(dat1和dat2)的特定指标。我希望两个图像都有相同的响应。 “理想”图像应该看起来像第一个数据集(dat1)
我想尝试将第二个数据集“拟合”到第一个数据集。如何使用Matlab缩放dat2以使其看起来像dat1? 我试图将dat1与不同的多项式,指数或高斯拟合,然后使用我发现的系数适合dat2,但程序失败并且它不合适,它给了我一条直线零线。当我尝试使用相同的形状使dat2适合允许系数自由时,程序不会给我理想的形状,因为它遵循dat2的趋势。
有没有办法让数据集适合另一组数据而不是函数?
答案 0 :(得分:1)
通常情况下,在这种情况下,一种非常常见的方法是将0
和1
之间的所有向量归一化(区间[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