我想规范化每列的矩阵。我现在有这个工作正常的代码:
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
,但这与我的代码不同。
我想规范化每列的矩阵。我现在有这个工作正常的代码:
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
,但这与我的代码不同。
您可以使用bsxfun
A = randn(10,3)
maxA = max(A,[],1)
minA = min(A,[],1)
bsxfun(@minus, A, minA ./ abs(maxA - minA))
但是,我不太了解您的规范化。宁愿使用
(A(:,i) - minA(i)) ./ (maxA(i) - minA(i))
正常化?如果是这样,该bsxfun
声明应为:
bsxfun(@times, bsxfun(@minus, A, minA), 1./abs(maxA - minA))
一般来说,它可能是:
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;