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);
如果未指定x
和y
,则array
被标准化为区间[0,1]
。
【讨论】:
【参考方案3】:MATLAB 具有特殊的归一化功能,包括在人工神经网络工具箱中,用于对输入值进行归一化。
mapminmax
mapminmax 通过将每行的最小值和最大值标准化为 [YMIN, YMAX] 来处理矩阵。
mapstd
mapstd 通过将每行的均值和标准差转换为 ymean 和 ystd 来处理矩阵。
more information
【讨论】:
以上是关于Matlab中可变范围[x,y]的归一化的主要内容,如果未能解决你的问题,请参考以下文章