我有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');
我可以知道代码有什么问题吗?
答案 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