在 Matlab 中将一个数据集缩放到另一个数据集
Scale one dataset to another in Matlab
我有两个数据集,它们是来自两个图像(dat1 和 dat2)的特定指标。我希望两个图像具有相同的响应。 'ideal' 图像应该看起来像第一个数据集 (dat1)
但真实图像看起来像第二个数据集(dat2)。
我想尝试 'fit' 第二个数据集到第一个数据集。我如何使用 Matlab 缩放 dat2 使其看起来像 dat1?
我试图用不同的多项式、指数或高斯拟合 dat1,然后使用我发现适合 dat2 的系数,但程序失败并且拟合不正确,它给了我一条直线零线。当我尝试使用允许系数自由的相同形状来拟合 dat2 时,程序不会给我我想要的理想形状,因为它遵循 dat2 的趋势。
有什么方法可以将数据集拟合到另一组数据而不是函数?
通常,在这种情况下,一种非常常见的方法是对 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
为了实现你提到的objective(根据dat2
的最小值和最大值重新缩放dat1
),你可以按照@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
我有两个数据集,它们是来自两个图像(dat1 和 dat2)的特定指标。我希望两个图像具有相同的响应。 'ideal' 图像应该看起来像第一个数据集 (dat1)
我想尝试 'fit' 第二个数据集到第一个数据集。我如何使用 Matlab 缩放 dat2 使其看起来像 dat1? 我试图用不同的多项式、指数或高斯拟合 dat1,然后使用我发现适合 dat2 的系数,但程序失败并且拟合不正确,它给了我一条直线零线。当我尝试使用允许系数自由的相同形状来拟合 dat2 时,程序不会给我我想要的理想形状,因为它遵循 dat2 的趋势。
有什么方法可以将数据集拟合到另一组数据而不是函数?
通常,在这种情况下,一种非常常见的方法是对 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
为了实现你提到的objective(根据dat2
的最小值和最大值重新缩放dat1
),你可以按照@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