如何加速forfor in loop语法

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
受@wangfulin和@SyuTingSong的启发,改了下代码,经测试,sumAll2更耗时,而在node环境下并无太大差异
function sumAll(arr) {
var i, sum = 0;
for (i = 0; i & arr. i++) {
sum += arr[i];
function sumAll2(arr) {
var len = arr.length,
for (; len& 0;) {
sum += arr[--len];
var num = [],
t2sum = 0,
t4sum = 0,
n = 10; //测试次数
for (i = 0; i & ; i++) {
num[i] = parseInt(Math.random() * 100000);
function test() {
var t1 = (new Date()).getTime();
var x = sumAll(num);
var t2 = (new Date()).getTime() - t1;
t2sum += t2;
var t3 = (new Date()).getTime();
var y = sumAll2(num);
var t4 = (new Date()).getTime() - t3;
t4sum += t4;
console.log('x:' + x);
console.log('y:' + y);
console.log('t2:' + t2);
console.log('t4:' + t4);
for (i = 0; i & i++) {
console.log('###############################');
console.log('t2avg:' + t2sum / n);
console.log('t4avg:' + t4sum / n);
为神马sumAll2更耗时间
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我修改一下答案....看来顺序读和倒序读并没有区别.我在nodejs下试了试, 两个时间消耗是一样的.
function sumAll3(arr) {
var left = arr.length % 8, sum = 0;
var i = 0, length = arr.
for (; i &) {
sum += arr[i + 0];
sum += arr[i + 1];
sum += arr[i + 2];
sum += arr[i + 3];
sum += arr[i + 4];
sum += arr[i + 5];
sum += arr[i + 6];
sum += arr[i + 7];
switch (left) {
case 7: sum += arr[i++];
case 6: sum += arr[i++];
case 5: sum += arr[i++];
case 4: sum += arr[i++];
case 3: sum += arr[i++];
case 2: sum += arr[i++];
case 1: sum += arr[i++];
我写了一个手动内联的版本, 表示在nodejs下面, 性能和第一个第二个没有显著差别......nodejs优化还是挺好的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
多测几次你会发现,t2有可能比t4小,也可能比t4大,len在循环内计算和循环外直接计算好对性能影响很小,所以受计算环境的影响可能会影响最终的结果,而这种结果也是不可预期的,所以没法作结论说sumAll2更耗时间或者sunAll2更不耗时间
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
改了一下你的程序,方便多次运行
function sumAll(arr) {
var i, sum = 0;
for (i = 0; i & arr. i++) {
sum += arr[i];
function sumAll2(arr) {
var len = arr.length,
for (; len & 0;) {
sum += arr[--len];
function test() {
var num = [];
for (var i = 0; i & ; i++) {
num[i] = parseInt(Math.random() * 100000);
var t1 = (new Date()).getTime();
var x = sumAll(num);
var t2 = (new Date()).getTime() - t1;
var t3 = (new Date()).getTime();
var y = sumAll2(num);
var t4 = (new Date()).getTime() - t3;
console.log('x:' + x);
console.log('y:' + y);
console.log('t2:' + t2);
console.log('t4:' + t4);
for (var i = 0; i & 4; i++) {
下面是我电脑上的运行结果
说明运行耗时有波动
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:查看: 2604|回复: 9|关注: 0
MATLAB中for……if
循环如何加速
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
大家好,我的程序中需要用到一堆for循环,速度太慢受不了,希望大神能指导我一下如何加速
%F定义为一个数组(1,3000),H也是一个数组(27,3000)
for mm=1:27
& & for nn=1:27
for n=1:100
for ll=1:9& &
x=zeros(1,500);
for jj=502:3000
& & for ii=1:500
& && &&&if F(1,jj)==mod(H(mm,jj-ii)*0.2+H(nn,jj-ii-n)*0.3+ll,10) %我希望找到F数组中与H数组中任意两个满足此关系的数据
& && && && &x(1,ii)=%将找到的数据在F数组中的位置赋值给x
& && &&&end
希望得到大家的指点和帮助。谢谢!
<h1 style="color:# 麦片财富积分
关系太复杂了,看得晕
可以考虑用C做成库函数调用
或者不知道用intersect可不可以
<h1 style="color:# 麦片财富积分
谢谢您的建议,关系并不复杂,就是多个循环,数据一个套着一个,算起来太慢了,busy半天不动。
论坛优秀回答者
关注者: 261
你这个循环本身就有问题
x=zeros(1,500);
这一句保证了只有mm=27,nn=27,n=100,ll=9的情况下的结果会被记录
<h1 style="color:# 麦片财富积分
是的,但是在mm=27,nn=27,n=100,ll=9这几个循环下也够我受的,计算太慢了,有好的方法吗?
<h1 style="color:# 麦片财富积分
关系看着晕:Q
论坛优秀回答者
关注者: 261
n=100的话,jj-ii-n显然可能小于0
<h1 style="color:# 麦片财富积分
“n=100的话,jj-ii-n显然可能小于0”请别考虑具体的是否可行,我只希望知道有没有不用for循环的其他快些的算法,谢谢。
论坛优秀回答者
<h1 style="color:#1 麦片财富积分
关注者: 24
可以预分配内存,将循环次数少的放在外层,尽量采取矩阵形式和索引以加快运算速度
<h1 style="color:# 麦片财富积分
谢谢中天3011,终于给我有一个启发性的建议,希望您能再指导具体一些,比如如何采用矩阵形式和索引呢,或者建议我看什么书,希望继续得到您的指导和帮助,谢谢!
站长推荐 /2
快速搭建新能源汽车整车模型及其性能优化
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区LabVIEW,4层for循环如何提高运算速度 - LabVIEW论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [精品]
LabVIEW,4层for循环如何提高运算速度
17:55:31  
1.PNG (18.25 KB, 下载次数: 0)
17:53 上传
LabVIEW用for结构编写实在太慢(不间断运行估计得1个月才能出结果),如何改善程序
会matlab 就不用那么麻烦了 LabVIEW 里有mathscript节点可以用,这个楼主自己百度一下喽
17:55:32  
会matlab 就不用那么麻烦了 LabVIEW 里有mathscript节点可以用,这个楼主自己百度一下喽
18:08:16  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
估计LabVIEW无法提高速度了,可以用其他语言编写一个函数,然后封装进DLL中,用LabVIEW调用吧
18:23:31  
估计LabVIEW无法提高速度了,可以用其他语言编写一个函数,然后封装进DLL中,用LabVIEW调用吧 ...
如果用matlab编写好后,通过mcc语句生成dll,怎样在labview中调用啊?
10:52:32  
但是 由于我的程序较为复杂,而且数据比较大,运用matlab节点的话&&回出现内存不足,变量发送失败等问题,以及程序崩溃等问题啊& &所以才在想怎么把matlab生成dll,然后在labview中调用,我已经生成了dll,但是在labview中调用的时候就出错了
助理工程师
09:36:42  
楼主试试公式节点就可以了。
如果没有自定义的函数,公式节点应该可以很好的解决吧。
另外用DLL是一个办法,如果调用出错的话,估计是你打包的DLL有问题,可尝试用CVI封装你的DLL。
15:44:59  
不错 学习了&&我也是 新手
22:38:13  
17:02:35  
好棒啊 我最近也遇到循环加速问题,求指点
13:25:26  
labview不是有好多数据处理的控件吗
14:11:03  
会matlab 就不用那么麻烦了 LabVIEW 里有mathscript节点可以用,这个楼主自己百度一下喽
原来可以这么用。谢谢~~~~
工程师职场
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 for loop 的文章

 

随机推荐