在Matlab中可变范围[x,y]中的标准化

时间:2012-04-28 14:48:39

标签: matlab normalization

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

  • 输入是数组[a1,a2,a3,a4,a5,a6,a7 ...],范围[x,y]
  • 输出是规范化数组。

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

感谢你的想法。

3 个答案:

答案 0 :(得分:51)

如果您想要标准化为[x, y],请先通过以下标准化为[0, 1]

 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;

答案 1 :(得分:0)

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

mapminmax

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

mapstd

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

more information

答案 2 :(得分:0)

从R2017b开始,MATLAB具有名为rescale的函数,该函数可以完全实现此目的。 也就是说,如果您想将array调整为间隔[x, y],则:

normalized_array = rescale(array, x, y);

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