3

列ごとに行列を正規化したい。私は今、正常に動作するこのコードを持っています:

A = randn(10,3)

maxA = max(A,[],1)
minA = min(A,[],1)

for i=1:size(A,2)
    A(:,i) = (A(:,i) - minA(i) ./ (maxA(i) - minA(i))
end

ただし、私のマトリックスははるかに大きくなるため、約 10k x 60k のループには永遠に時間がかかります。コードをベクトル化するにはどうすればよいですか? Matlab を使用することを考えnormcましたが、それは私のコードと同じではありません。

4

2 に答える 2

0

一般的には次のようになります。

A = (A - ones(size(A)) * diag(minA)) / diag(maxA - minA);

また

A = (A - ones(size(A)) * diag(minA)) * diag(1 ./ (maxA - minA));

ただし、サイズを考慮してください:

m = repmat(minA, size(A, 1), 1);
n = repmat(maxA - minA, size(A, 1), 1);
A = (A - m) ./ n;
于 2013-04-08T17:41:01.070 に答える