matlab归一化问题

时间:2011-08-16 09:21:32

标签: matlab bsxfun

我有84组数据,第一组数据按以下代码标准化...标准化方程为(((N-min)* 2)/(max-min)) - 1)..

%read 1st set of data
N = xlsread('output1.xls','data');    

%normalize the 27 columns
N = bsxfun(@minus,N,min(N,[],1));
N = bsxfun(@times,N,2./max(N,[],1));
N = N - 1;
xlswrite('output1.xls',N,'normdata');

现在,每个数据集都有27列。从第一个数据集的原始数据中,找出每列的最大值和最小值。因此,每列有27个最大值和27个最小值...然后使用这27个最大值和每列27个最小值,标准化第一组数据和第二至第84数据集...

以下代码来自b3的答案,但与上述代码不同。

N = xlsread('output1.xls', 'data');
minN1 = min(N);
maxN1 = max(N);
N = bsxfun(@minus, N, minN1);
N = bsxfun(@times, N, 2./maxN1);
N = N - 1;
xlswrite('output1.xls',N,'normdata');

我可以知道代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

在您的示例中,第一个数据集位于名为 output1.xls 的文件中,因此我假设所有输入文件的格式为 output#.xls 。存储第一个文件的规范化参数,然后循环重复规范化计算的其余文件。

N = xlsread('output1.xls', 'data');
minN1 = min(N);
maxN1 = max(N);
N = normalize(N, minN1, maxN1);
xlswrite('output1.xls', N, 'normdata');
for ii = 2:84
    filename = sprintf('output%u.xls', ii);
    N = xlsread(filename, 'data');
    N = normalize(N, minN1, maxN1);
    xlswrite(filename, N, 'normdata');
end

function N = normalize(N, minN1, maxN1)
    N = bsxfun(@times, N 2./(maxN1-minN1));
    N = N - 1;
end