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

将数据归一化到任意区间范围的方法将数据归一化到任意区间范围的方法一般常见的数据归一化,是归一化到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;
}

 

 

 

 

 

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux clion 激活码【在线注册码/序列号/破解码】

    linux clion 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    50
  • pytorch MSELoss参数详解「建议收藏」

    pytorch MSELoss参数详解「建议收藏」pytorchMSELoss参数详解importtorchimportnumpyasnploss_fn=torch.nn.MSELoss(reduce=False,size_average=False)a=np.array([[1,2],[3,8]])b=np.array([[5,4],[6,2]])input=torch.autograd.Variable(to…

    2022年9月18日
    0
  • export在linux中用法_设置环境变量命令

    export在linux中用法_设置环境变量命令Linux中export命令介绍,三种方法设置环境变量

    2022年9月6日
    2
  • linux重启网卡的命令行,linux系统怎么重启网卡?linux重启网卡的三种教程

    linux重启网卡的命令行,linux系统怎么重启网卡?linux重启网卡的三种教程在实际工作中,经常会遇到Linux系统进行重启网卡的操作。在这里整理一下,进行多种方法的网卡重启。一、servicenetworkrestart1、首先用CRT工具连接到Linux命令行界面。或者进入操作系统界面,选择终端输入。2、如果我们对所有的网卡进行重启操作。可以尝试输入:servicenetworkrestart命令进行操作。3、样就完成了用servicenetworkr…

    2022年9月22日
    0
  • 项目范围管理:范围定义[通俗易懂]

    项目范围管理:范围定义[通俗易懂]定义范围是制定项目和产品详细描述的过程。 定义范围的主要作用是:明确所收集的需求哪些将包括在项目范围内,哪些将排除在项目范围外,从而明确项目、服务或输出的边界。 范围定义的内容和作用:由于在收集需求过程中识别出的所有需求未必都包含在项目中,所以定义范围过程就是从需求文件中选取最终的项目需求,然后制定出关于项目及其产品、服务或输出的详细描述。 准备好详细的项目范围说明书,对项目成功至关重要。应根据项目启动过程中记载的主要可交付成果、假设条件和制约因素来编制项目范围说明书。在项目规划过程中,随着对项目

    2022年9月22日
    0
  • ffmpeg添加视频封面_ffmpeg提取波形文件

    ffmpeg添加视频封面_ffmpeg提取波形文件ffmpeg-ia.mp4-y-fimage2-frames1a.jpgffmpeg-i11.mp4-vframes1xx.jpgffmpeg-ia.mp4-r0.1frames_%04.pngconvert-backgroundwhite-flatten***.pdf***.png

    2025年6月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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