我想在 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
选项B:
mn=mean(x);
sdx=std(x);
for i=1:size(x,1)
xn(i,:)=(x(i,:)-mn)./(sdx+(sdx==0));
end
但是,这些选项对于我的数据来说花费了太多时间,例如在 5000x53 矩阵上需要 3-4 秒。那么,有没有更好的解决方案呢?
Use bsxfun而不是循环。这可能会快一点;但是,它也可能使用更多内存(这可能是您的情况的一个问题;如果您进行分页,一切都会非常慢)。
要使用平均值和标准差进行标准化,您可以写
mn = mean(x);
sd = std(x);
sd(sd==0) = 1;
xn = bsxfun(@minus,x,mn);
xn = bsxfun(@rdivide,xn,sd);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)