Matlab中,我想提高运算速度,请问怎样才能把下面的for循环转换成矩阵运算来提高速度? m=0

Matlab中,我想提高运算速度,请问怎样才能把下面的for循环转换成矩阵运算来提高速度?m=0;fori=1:46847fort=1:46847m=m+strncmp(... Matlab中,我想提高运算速度,请问怎样才能把下面的for循环转换成矩阵运算来提高速度?
m=0;
for i=1:46847
for t=1:46847
m=m+strncmp(R2new1{1,t}R1new1{1,i},5);
end

end
m
其中R2new1和R1new1中存的是字符串,长度也比较长。本程序的目的是找单元阵列R2new1和R1new1中相同字符串的对数。
展开
 我来答
dukinkin
推荐于2016-10-17 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:914万
展开全部
m=0;
for i=1:46847
tf=strncmp(R2new1,R1new1{1,i},5);
m=m+sum(tf);
end

这里是两重循环,每个循环的数据量都比较大
完全转为矩阵运算是个很大的二维矩阵,占据内存比较大
所以还保留一层循环,将内层循环变成矩阵运算
更多追问追答
追问
这样处理后是能快些。您的意思是转换成二维矩阵后运算起来也会很慢是吧?
追答
matlab的指令是解析运行的,

也就是一边将代码翻译为计算机语言一边运行
一句矩阵运算的指令只需要解析一次
而循环中每次运行同一个指令,每次都要解析一次
这就是为什么用矩阵运算会比循环快

但矩阵运算也有缺点,就是用的内存多一些,因为要记录整个矩阵计算的结果
实际上是用空间去换时间

因为你是要比较 R2new1和R1new1中每一个配对
所以总共需要比较46847*46847次

你原来的代码用两层46847次的循环来完成46847*46847次的比较
除了R2new1和R1new1这两原有的数据外

就用了i,t,m三个变量,几乎可以说没有用额外的存储空间

我的代码增加了一个tf变量,起码增加了一个长度是46847的逻辑矩阵的储存空间
用一句代码tf=strncmp(R2new1,R1new1{1,i},5); 比较了46847次
代替原来的内层循环,省了4万多次解析语句的时间

如果要完全用矩阵办法去完成比较,
那么你需要构造两个46847*46847的矩阵去存放原来的数据
还要有一个46847*46847的逻辑矩阵存放结果
假如一个46847*46847只占1个字节,粗略估计这样一个矩阵需要约2G的内存
实际没一个数据还需要不止一个字节的储存空间
所以需要的内存空间还需要提高几倍,这不是一般计算机配置能够承受的

再换句话,假如能有这么多内存给你用
但是向系统要求分配内存和内存的读写些也是需要时间的

由于我的电脑没有这么大的内存,所以没有办法测试
全部矩阵化会不会比部分矩阵化更快
但这里我认为只化简一层循环比较实际
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式