RYN*_*RYN 10 performance matlab normalization
我想在Matlab中规范化矩阵的每一列.我试过两个实现:
选项A:
mx=max(x);
mn=min(x);
mmd=mx-mn;
for i=1:size(x,1)
xn(i,:)=((x(i,:)-mn+(mmd==0))./(mmd+(mmd==0)*2))*2-1;
end
Run Code Online (Sandbox Code Playgroud)
选项B:
mn=mean(x);
sdx=std(x);
for i=1:size(x,1)
xn(i,:)=(x(i,:)-mn)./(sdx+(sdx==0));
end
Run Code Online (Sandbox Code Playgroud)
但是,这些选项对我的数据花费了太多时间,例如5000x53矩阵上的3-4秒.那么,还有更好的解决方案吗?
Jon*_*nas 15
使用bsxfun而不是循环.这可能会快一些; 但是,它也可能使用更多的内存(在你的情况下这可能是一个问题;如果你正在分页,一切都会非常慢).
要用mean和std标准化,你要写
mn = mean(x);
sd = std(x);
sd(sd==0) = 1;
xn = bsxfun(@minus,x,mn);
xn = bsxfun(@rdivide,xn,sd);
Run Code Online (Sandbox Code Playgroud)
请记住,在MATLAB中,vectorizing = speed.
如果A是M×N矩阵,
A = rand(m,n);
minA = repmat(min(A), [size(A, 1), 1]);
normA = max(A) - min(A); % this is a vector
normA = repmat(normA, [length(normA) 1]); % this makes it a matrix
% of the same size as A
normalizedA = (A - minA)./normA; % your normalized matrix
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47365 次 |
| 最近记录: |