日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将数据归一化到任意区间范围的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將數據歸一化到任意區間范圍的方法

? ?一般常見的數據歸一化,是歸一化到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:rBound(1,i)=min(Array_src(:,i));Bound(2,i)=max(Array_src(:,i));if abs(Bound(1,i)-Bound(2,i))<0.000000001Bound(1,i)=0;Bound(2,i)=1;end end[m,n]=size(Array_src); for i=1:mArray_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; }

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的将数据归一化到任意区间范围的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。