Matlab中可变范围[x,y]的归一化

Posted

技术标签:

【中文标题】Matlab中可变范围[x,y]的归一化【英文标题】:Normalization in variable range [ x , y ] in Matlab 【发布时间】:2012-05-09 00:35:40 【问题描述】:

我想创建一个基本的 matlab 程序来规范化给定范围内的给定整数数组。

输入是数组 [ a1 , a2 , a3 , a4 , a5 , a6 , a7...] 和范围 [ x , y ]​​i> 输出是标准化数组。

但在任何地方,我都看到 [0,1] 或 [-1,1] 范围内的标准化。找不到变量范围标准化。 如果您编写 matlab 代码或变量范围公式,我将不胜感激。

感谢您的想法。

【问题讨论】:

【参考方案1】:

如果你想标准化为[x, y],首先标准化为[0, 1] via:

 range = max(a) - min(a);
 a = (a - min(a)) / range;

然后通过以下方式缩放到[x,y]

 range2 = y - x;
 a = (a * range2) + x;

把它们放在一起:

 function normalized = normalize_var(array, x, y)

     % Normalize to [0, 1]:
     m = min(array);
     range = max(array) - m;
     array = (array - m) / range;

     % Then scale to [x,y]:
     range2 = y - x;
     normalized = (array*range2) + x;

【讨论】:

很好的解决方案,但有一段时间它似乎是 Python,我没有看就复制粘贴了 :P (在我投票和评论之后,我查看了标题,发现这是针对 matlab 的!抱歉,虽然它是很有帮助!) 如果我没有输入范围怎么办?假设我想在 [-1,1] 范围内输入一个数字,例如 345 @superpuccio:?你能澄清你在问什么吗? 很好的解决方案!拯救了我的一天:p 两个线性映射可以组合成一个线性映射。这似乎是一个浪费的答案。【参考方案2】:

从 R2017b 开始,MATLAB 有一个名为 rescale 的函数,它正是这样做的。 即,如果您想将 array 重新缩放到间隔 [x, y] 则:

normalized_array = rescale(array, x, y);

如果未指定xy,则array 被标准化为区间[0,1]

【讨论】:

【参考方案3】:

MATLAB 具有特殊的归一化功能,包括在人工神经网络工具箱中,用于对输入值进行归一化。

ma​​pminmax

mapminmax 通过将每行的最小值和最大值标准化为 [YMIN, YMAX] 来处理矩阵。

ma​​pstd

mapstd 通过将每行的均值和标准差转换为 ymean 和 ystd 来处理矩阵。

more information

【讨论】:

以上是关于Matlab中可变范围[x,y]的归一化的主要内容,如果未能解决你的问题,请参考以下文章

数据的归一化处理

谁能帮我用matlab归一化一组数据,需要运行结果,谢谢

matlab中怎样将矩阵归一化处理?

matlab程序的归一化问题

MATLAB中神经网络建模中的归一化和非归一化

数据的归一化和标准化