matlab列向量归一,Matlab最快的矩阵列向量归一化方法

博客作者通过对比两种MATLAB中矩阵列向量归一化的方法,指出了一种常见但效率较低的向量化方法,并推荐了一种更快的for循环实现。实测表明,使用for循环的方法在计算速度上至少比向量化方法快一倍,且在处理大数据时内存消耗更小。结论是,优化代码时实践是检验效率的唯一标准。
摘要由CSDN通过智能技术生成

From 组长卢参义的博客:   http://blog.sciencenet.cn/blog-242887-496374.html

在使用matlab撰写代码时可能会遇到的一个问题就是矩阵列向量的归一化。在优化matlab代码方面,有一个较普遍适用的观点是尽可能地把数据向量化、矩阵化,因为matlab擅长矩阵运算。因此在一些matlab优化方面的教材中会看到一种向量化的矩阵列向量归一化方法,如下

vMag = sqrt(sum(X.^2));

X = X./vMag(ones(1,size(X,1)),:);

但事实上这种方法不仅耗内存而且又慢,目前我所知道的最快速的方法是

for i = 1 : num

X(:,i) = X(:,i) / norm(X(:,i)) ;

end

这种方法相比于前一种方法在计算速度方面至少可以提升一倍。具体测试如下 :

X = rand(5000,5000) ;

[dim,num] = size(X) ;

tic

for i = 1 : num

X(:,i) = X(:,i) / norm(X(:,i)) ;

end

t1 = toc

tic

vMag = sqrt(sum(X.^2));

X = X./vMag(ones(1,size(X,1)),:);

t2= toc

返回结果:

t1 =

0.5162

t2 =

1.0806

如果把数据弄得更大,如

X = rand(10000,5000) ;

那么第一种方法内存都不足!返回结果如下,

t1 =

0.9821

??? Out of memory. Type HELP MEMORY for your options.

Error in ==> Experiment_YaleB at 12

vMag = sqrt(sum(X.^2));

因此,不是所有的向量化操作都会提高运行效率,唯一的检验标准就是实践!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值