2

我有 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 个最小值,规范化第 1 组数据和第 2 到第 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');

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

4

1 回答 1

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
于 2011-08-16T09:35:59.780 回答