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 に答える