向量化 matlab 列归一化

Posted

技术标签:

【中文标题】向量化 matlab 列归一化【英文标题】:Vectorizing matlab column normalization 【发布时间】:2013-03-30 07:58:45 【问题描述】:

我想对每列的矩阵进行归一化。我现在有这个工作正常的代码:

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 但这与我的代码不同。

【问题讨论】:

【参考方案1】:

您可以使用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))

【讨论】:

确实,您对标准化的看法是正确的。我实际上在 Matlab 中做对了,但是在手动输入时我错误地复制了它。该方法效果很好。【参考方案2】:

一般来说可能是:

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;

【讨论】:

以上是关于向量化 matlab 列归一化的主要内容,如果未能解决你的问题,请参考以下文章

matlab 怎样进行数据归一化

matlab 数据归一化问题

matlab程序的归一化问题

matlab 矩阵怎么归一化

matlab中怎样将矩阵归一化处理?

怎样用matlab进行列向量归一化?