将数据归一化到任意区间范围的方法

将数据归一化到任意区间范围的方法将数据归一化到任意区间范围的方法一般常见的数据归一化,是归一化到0~1,或者-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间,方法是:将数据归一化到[a,b]区间范围的方法:(1)首先找到样本数据Y的最小值Min及最大值Max(2)计算系数为:k=(b-a)/(Max-Min)(3)得到归一化到[a,b]区间的数据:norY=a+k(Y-Min)Matla

大家好,又见面了,我是你们的朋友全栈君。

数据归一化到任意区间范围的方法

   一般常见的数据归一化,是归一化到0~1,或者-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间,方法是:

    将数据归一化到[a,b]区间范围的方法:

(1)首先找到样本数据Y的最小值Min及最大值Max
(2)计算系数为:k=(b-a)/(Max-Min)
(3)得到归一化到[a,b]区间的数据:norY=a+k(Y-Min)

Matlab代码:

 

clc;clear all;close all;
%%
x=0:0.1:10;
y=(x-5).^2;%产生原始数据样本
figure
plot(x,y,'.-')
axis([0 10 0 26]);
grid on

%% 将数据归一化到[a,b]区间的方法
a=0.1;
b=0.5;
Ymax=max(y);%计算最大值
Ymin=min(y);%计算最小值
k=(b-a)/(Ymax-Ymin);
norY=a+k*(y-Ymin);
figure;
plot(x,norY,'.-')
axis([0 10 0 1]);
grid on

实质上,归一化的一般规范函数是:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin:

参考资料http://zjh776.iteye.com/blog/1972777 

下面给出简化的归一化到任意区间的方法函数:

 

function [ y ] = normalization( x,ymin,ymax )
%NORMALIZATION 将数据x归一化到任意区间[ymin,ymax]范围的方法
%   输入参数x:需要被归一化的数据
%   输入参数ymin:归一化的区间[ymin,ymax]下限
%   输入参数ymax:归一化的区间[ymin,ymax]上限
%   输出参数y:归一化到区间[ymin,ymax]的数据
xmax=max(x);%计算最大值
xmin=min(x);%计算最小值
y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;
end

Matlab里有一个归一化函数normalize,对矩阵是按列归一化的:

 

%按列归一化,任意归一化范围
function [Array_dst]=normalize(Array_src,ymin,ymax)
[l,r]=size(Array_src);
Bound=[];
for i=1:r
    Bound(1,i)=min(Array_src(:,i));
    Bound(2,i)=max(Array_src(:,i));
    if abs(Bound(1,i)-Bound(2,i))<0.000000001
        Bound(1,i)=0;
        Bound(2,i)=1;
    end
end

[m,n]=size(Array_src);
for i=1:m
    Array_dst(i,:)=ymin + (Array_src(i,:)-Bound(1,:))./(Bound(2,:)-Bound(1,:)).*( ymax - ymin );
end

 

 

 

OpenCV或者C++中可以这么实现:

 

cv::Mat Normalization(cv::Mat data,float Omin,float Omax) {
	double minv = 0.0, maxv = 0.0;
	minMaxIdx(data, &minv, &maxv);

	float *p= data.ptr<float>(0);
	int len = data.cols;
	cv::Mat dest(1, len, CV_32FC1);
	float *d = dest.ptr<float>(0);
	for (size_t i = 0; i < len; i++)
	{
		d[i] = (Omax - Omin)*(p[i] - minv)/ (maxv - minv) + Omin;;
	}
	return dest;
}

cv::Mat Normalization(cv::Mat data, float Imin, float Imax,float Omin, float Omax) {
	float *p = data.ptr<float>(0);
	int len = data.cols;
	cv::Mat dest(1, len, CV_32FC1);
	float *d = dest.ptr<float>(0);
	for (size_t i = 0; i < len; i++)
	{
		d[i] = (Omax - Omin)*(p[i] - Imin) / (Imax - Imin) + Omin;;
	}
	return dest;
}

float Normalization(float x, float Imin, float Imax, float Omin, float Omax) {
	float d = (Omax - Omin)*(x - Imin) / (Imax - Imin) + Omin;;
	return d;
}

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152310.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Laravel 登录后清空COOKIE 方法

    Laravel 登录后清空COOKIE 方法

    2021年10月27日
  • 关于ASp.net中的session失效问题的解决办法之一

    关于ASp.net中的session失效问题的解决办法之一
    在Web.config中的sessionstate段中 加入cookieless=”true”。一般即可解决问题。

  • hash校验软件_hash加密

    hash校验软件_hash加密【Hash篇】HashTab一款可扩展资源管理器的哈希校验软件​ HashTab是一款非常优秀的Windows资源管理器扩展程序,它在资源管理器的属性窗口中添加了”文件校验”的标签,可以非常方便地校验文件的CRC32、MD5、SHA1等校验值,另外还可以迅速与其他文件进行哈希值比对!—【suy】文章目录【Hash篇】HashTab一款可扩展资源管理器的哈希校验软件1、自定义哈希算法2、文件比较功能3、下载地址总结1、自定义哈希算法​ HashTab可计算和显示来自二十多种流行的哈希算法的哈希值,

  • DatabaseMetaData元数据

    DatabaseMetaData元数据通过java.sql.DatabaseMetaData接口,您可以获得有关您已连接到的数据库的元数据。例如,你可以看到哪些表的数据库,和什么中定义的列的每个表的数量,是否是给定功能支持等。DatabaseMetaData接口包含很多的方法,和并不是所有将在本教程中覆盖。你应该看看的JavaDoc。此文本将只是覆盖面不够,给你一种感觉,你可以用它。获得一个DatabaseMetaData实例

  • Mac OS mojave, Big Sur 内置读写NTFS[通俗易懂]

    Mac OS mojave, Big Sur 内置读写NTFS[通俗易懂]MacOSmojave,BigSur内置读写NTFS注意事项:你的NTFS磁盘命名不要出现空格,下划线等特殊字符。详细流程插上硬盘后,查看你的硬盘名称,这里假设名称是硬盘名字,例如XiangguoNTFS(你的NTFS磁盘命名不要出现空格,下划线等特殊字符)打开Terminal,你也可以直接spotlight输入terminal打开。在终端输入sudonano/etc/fstab敲击回车现在你看到了一个编辑界面,输入LABEL=XiangguoNTFSnonentfs

  • 2014百度之星第三题Xor Sum(字典树+异或运算)「建议收藏」

    2014百度之星第三题Xor Sum(字典树+异或运算)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号