精华内容
下载资源
问答
  • for循环太多如何优化
    千次阅读
    2021-02-10 05:23:11

    下面是测试代码,我的实际代码看起来几乎相似,其中我使用的原始矩阵是随机生成的。如何优化此嵌套for循环。我知道在python中是可能的,但是我不能这样做。在import time

    import numpy as np

    a = 1000

    b = 500

    sum2,sum3,sum4 = 0

    t0 = time.time()

    x = np.random.random(a*a).reshape([a,a])

    for outer1 in xrange(0,a):

    for inner1 in xrange(0,b):

    for outer2 in xrange(0,a):

    for inner2 in xrange(0, a):

    sum2 += x[outer2][inner2] #this is not the only operation I have

    for outer3 in xrange(0,a):

    for inner3 in xrange(0, a):

    sum3 += x[outer3][inner3] #this is not the only operation I have

    for outer4 in xrange(0,a):

    for inner4 in xrange(0, a):

    sum4 += x[outer4][inner4] #this is not the only operation I have

    print time.time() - t0

    print 'sum2: '+str(sum2)+' sum3: '+str(sum3)+' sum4: '+str(sum4)

    我使用的是python2.7。

    谢谢您。在

    更多相关内容
  • java for循环及其优化

    千次阅读 2021-03-16 11:37:30
    for循环1.首先知道,for循环的3个表达式的意思:表达式1: 一般为赋值表达式,给控制变量赋初值;表达式2: 关系表达式或逻辑表达式,循环控制条件;表达式3: 一般为赋值表达式,给控制变量增量或减量。3个表达式都...

    for循环

    1.首先知道,for循环的3个表达式的意思:

    表达式1: 一般为赋值表达式,给控制变量赋初值;

    表达式2: 关系表达式或逻辑表达式,循环控制条件;

    表达式3: 一般为赋值表达式,给控制变量增量或减量。

    3个表达式都可以为空,第2个表达式为空,表示条件一直为true,for无限循环。

    for(;;){

    System.out.println("hello");

    }

    //输出结果:无限输出,疯狂输出

    hello

    hello

    ……

    2.第1个初始化表达式,可以对多个同类型变量赋值;第3个条件若有多个条件,可以用逻辑运算符(&& 、 || 、!)连接;第3个表达式可以用逗号隔开多个表达式

    for(int i=0,j=0;i<10&&j<5;i++,j++){

    System.out.println("i="+i+",j="+j);

    }

    for循环优化

    1、在参数表达式上优化

    1.1、不要在表达式上做复杂运算

    如下代码

    List list = new ArrayList<>();

    for (int i = 0; i < list.size(); i++) {

    }

    for的第2个表达式上面用了list.size(),这样就导致了每次循环到这里都要去进行一次list的个数计算,会降低性能;应该改为这样

    List list = new ArrayList<>();

    for (int i = 0, len = list.size(); i < len; i++) {

    }

    1.2、循环嵌套,应该采用外大内小型;也就是循环次数多的for放在外层,循环次数少的for放在内层。

    for(int i=0;i<1000;i++){

    for(int j=0;j<100;j++){

    for(int k=0;k<10;k++){

    function(i,j,k);

    }

    }

    }//耗时333 3105 纳秒

    改为

    for(int k=0;k<10;k++){

    for(int j=0;j<100;j++){

    for(int i=0;i<1000;i++){

    function(i,j,k);

    }

    }

    }//耗时282 7670 纳秒

    2、无用逻辑要放在循环外,避免重复计算发生

    int a = 10, b = 11;

    for (int i = 0; i < 10; i++) {

    i = i * a * b;

    }

    改为

    int c = a * b;

    for (int i = 0; i < 10; i++) {

    i = i * c;

    }

    3、try catch语句放到循环外,因为抓捕异常是非常耗时的,所以放到for外面一次抓取

    for (int i = 0; i < 10; i++) {

    try {

    } catch (Exception e) {

    }

    }

    改为

    try {

    for (int i = 0; i < 10; i++) {

    }

    } catch (Exception e) {

    } 参考资料: http://www.cnblogs.com/ywl925/p/3608192.html http://blog.csdn.net/liushuijinger/article/details/41546347 http://cgs1999.iteye.com/blog/1596671

    展开全文
  • 性能优化-多层嵌套for循环如何优化

    千次阅读 2019-11-23 14:25:14
    代码示例 ... /** * @program: cwl-performance-optimization * @description: 测试for循环-嵌套循环 * @author: ChenWenLong * @create: 2019-11-22 11:27 **/ public class TestNestedLoop { // 当需...
    代码示例
    package com.cwl.po;
    
    /**
     * @program: cwl-performance-optimization
     * @description: 测试for循环-嵌套循环
     * @author: ChenWenLong
     * @create: 2019-11-22 11:27
     **/
    public class TestNestedLoop {
    
        // 当需要嵌套循环时 外层循环越小 性能越好
        // 例如 10*100*1000 与 1000*100*10 相互比较
        public static void main(String[] args) {
            // 测试最终结果发现当嵌套循环越大 两者相差性能比越大
            System.out.println(testOutSide());
            System.out.println(testInSide());
        }
    
    
        /**
         * 功能描述:
         * 〈测试内层循环逐步增大〉
         *
         * @params : []
         * @return : long
         * @author : cwl
         * @date : 2019/11/22 11:36
         */
        private static long testInSide() {
            long begin = System.currentTimeMillis();
            int d = 0;
            for(int a=0;a<1000;a++){
                for(int b=0;b<10000;b++){
                    for (int c=0;c<100000;c++){
                        d = a+b+c;
                    }
                }
            }
            long end = System.currentTimeMillis();
            System.out.println(d);
            return end - begin;
    
        }
    
        /**
         * 功能描述:
         * 〈测试内层循环逐步减小〉
         *
         * @params : []
         * @return : long
         * @author : cwl
         * @date : 2019/11/22 11:37
         */
        private static long testOutSide() {
            long begin = System.currentTimeMillis();
            int d = 0;
            for(int a=0;a<100000;a++){
                for(int b=0;b<10000;b++){
                    for (int c=0;c<1000;c++){
                        d = a+b+c;
                    }
                }
            }
            long end = System.currentTimeMillis();
            System.out.println(d);
            return end - begin;
        }
    }
    
    
    展开全文
  • java性能优化for循环

    千次阅读 2021-02-26 08:27:23
    今天就来说一下Java代码优化的事情,今天主要聊一下对于for(while等同理)循环优化。作为三大结构之一的循环,在我们编写代码的时候会经常用到。循环结构让我们操作数组、集合和其他一些有规律的事物变得更加的方便...

    今天就来说一下Java代码优化的事情,今天主要聊一下对于for(while等同理)循环的优化。

    作为三大结构之一的循环,在我们编写代码的时候会经常用到。循环结构让我们操作数组、集合和其他一些有规律的事物变得更加的方便,但是如果我们在实际开发当中运用不合理,可能会给程序的性能带来很大的影响。所以我们还是需要掌握一些技巧来优化我们的代码的。

    嵌套循环

    stratTime = System.nanoTime();

    for (int i = 0; i 

    for (int j = 0; j 

    }

    }

    endTime = System.nanoTime();

    System.out.println("外大内小耗时:"+ (endTime - stratTime));

    应改为:

    stratTime = System.nanoTime();

    for (int i = 0; i <10 ; i++) {

    for (int j = 0; j 

    }

    }

    endTime = System.nanoTime();

    System.out.println("外小内大耗时:"+(endTime - stratTime));

    两者耗时对比:

    外大内小耗时:200192114

    外小内大耗时:97995997

    由以上对比可知,优化后性能提升了一倍,嵌套循环应该遵循“外小内大”的原则,这就好比你复制很多个小文件和复制几个大文件的区别。

    提取与循环无关的表达式

    stratTime = System.nanoTime();

    for (int i = 0; i 

    i=i*a*b;

    }

    endTime = System.nanoTime();

    System.out.println("未提取耗时:"+(endTime - stratTime));

    应改为:

    stratTime = System.nanoTime();

    c = a*b;

    for (int i = 0; i 

    i=i*c;

    }

    endTime = System.nanoTime();

    System.out.println("已提取耗时:"+(endTime - stratTime));

    两者耗时对比:

    未提取耗时:45973050

    已提取耗时:1955

    代码中a+b与我们的循环无关,所以应该把它放到外面,避免重复计算,可以看出,优化后性能提升了好几个数量级,这些是不容忽视的。

    消除循环终止判断时的方法调用

    stratTime = System.nanoTime();

    for (int i = 0; i 

    }

    endTime = System.nanoTime();

    System.out.println("未优化list耗时:"+(endTime - stratTime));

    应改为:

    stratTime = System.nanoTime();

    int size = list.size();

    for (int i = 0; i 

    }

    endTime = System.nanoTime();

    System.out.println("优化list耗时:"+(endTime - stratTime));

    两者耗时对比:

    未优化list耗时:27375

    优化list耗时:2444

    list.size()每次循环都会被执行一次,这无疑会影响程序的性能,所以应该将其放到循环外面,用一个变量来代替,优化前后的对比也很明显。

    异常捕获

    stratTime = System.nanoTime();

    for (int i = 0; i 

    try {

    } catch (Exception e) {

    }

    }

    endTime = System.nanoTime();

    System.out.println("在内部捕获异常耗时:"+(endTime - stratTime));

    应改为:

    stratTime = System.nanoTime();

    try {

    for (int i = 0; i 

    }

    } catch (Exception e) {

    }

    endTime = System.nanoTime();

    System.out.println("在外部捕获异常耗时:"+(endTime - stratTime));

    两者耗时对比:

    在内部捕获异常耗时:12150142

    在外部捕获异常耗时:1955

    大家都知道,捕获异常是很耗资源的,所以不要讲try catch放到循环内部,优化后同样有好几个数量级的提升。

    性能优化的内容有很多,代码优化只是其中一小部分,我们在日常开发中应养成良好的编码习惯。接下来会跟大家探讨更多关于性能优化的内容,希望大家积极交流指导。

    展开全文
  • 线程优化for循环

    千次阅读 2020-03-24 23:23:02
    for循环里的操作用时长,使用线程分开执行,相当于一个工作个人来做,比原先一个人做快! package thread; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch...
  • Java优化for循环嵌套的高效率方法

    千次阅读 2021-02-12 23:59:03
    前几天有人问过我一个问题,就是两个嵌套for循环执行效率的问题,问有什么好的办法替换。当时我想了想,实在想不起来,哎,惭愧!!! 请教了答案,恍然大悟。比如:两个list中分别装有相同的对象数据。 list1中有3...
  • 关于for循环嵌套for循环优化问题

    千次阅读 2020-06-25 13:54:53
    对于for循环的嵌套问题 我们常见就是这样: for (int i = 0; i < 1000; i++){ for (int j = 0; j < 100; j++){ for (int k = 0; k < 10; k++){ system.out.println(i+"====="+j+"====="+k); } } } ...
  • 如何优化Python中的嵌套for循环

    千次阅读 2021-04-27 03:41:58
    纽比广播如果不受内存限制,优化numpy中嵌套循环的第一步是使用广播并以矢量化的方式执行操作:import numpy as npdef mb_r(forecasted_array, observed_array):"""Returns the Mielke-Berry R value."""assert len...
  • js-for循环的性能优化

    千次阅读 2020-11-23 15:33:21
    for :我能快!我还能快!我还能再快!
  • 多层for循环优化

    千次阅读 2019-05-12 13:33:51
    1.6.1 找出最大周长的三角形 /*可以用穷举找出最长,三重循环。*/ for (i = 0; i ;++i) { for (j = i + 1; j ; ++j) { for (k = j + 1; k ; ++k) { len = b[i] + b[j] + b[k]; m
  • for循环使用线程优化

    千次阅读 2020-05-15 01:02:12
    for(int i=0;i;i++){ list.add(i); } test.m1(list); long et2 = System.currentTimeMillis(); System.out.println("[1]耗时:"+(et2 - bt)+ "ms"); Thread thread = new Thread(); long at = System....
  • for循环优化 --- 线程并发实现

    千次阅读 2022-01-29 09:21:35
    而当for循环的次数过多,以及多重for循环时,我们会发现执行效率会变的很低,整体耗时非常。 本次我们就使用线程并发的方式来对循环进行优化线程并发实现 1. 创建线程池 // newFixedThreadPool是...
  • 方法一:for 循环--多层嵌套 box,box1,box2 = [0,1,2],[0,3,4],[0,5,6] # 0,1,2 三个盒子,数字代表球的种类 box3,box4,box5 = [0,5,6],[0,3,4],[0,1,2] # 3,4,5 三个盒子 Box = [box,box1,box2,box3,box4,box...
  • python for循环优化

    千次阅读 2020-02-27 14:36:44
    最初,建立项目时用户少,中间使用了for循环,还是嵌套的,共两层,项目整体耗时1-2个小时。最近,随着用户量增长,项目耗时达到6-7个小时。显然是不能接受的。 for t, w in user_tags: for it, w in tag_items[t]:...
  • C++ for循环效率优化

    千次阅读 2021-11-04 10:47:58
    C++ for循环效率优化 背景 今天看到同事的代码,commit message说要提高循环效率,但是看起来非常浪费时间,我就想试一下for循环怎么写运行最快,发现还是非常有意思的。 首先是编译选项,在X86系统编译Release,...
  • 循环多不要紧,要紧的是循环嵌套得太多,要解决这个问题,需要从根本上找原因,用更好的数据结构和算法,从根源上减少对于循环的需求方法2:将循环次数多的放在里面,循环次数少的放在外面做大循环方法3:for循环中...
  • 关于for循环的耗时优化

    千次阅读 2018-03-28 19:06:41
    1.for(int i=0;i&lt;list.size();i++){}应该改为如下:int ...嵌套循环应该遵循“外小内大”的原则3.for (int i = 0; i &lt; 10000000; i++) {i=i*a*b;} 应该改为如下避免a*b重复计算:int c = a*b;for (in...
  • for循环优化

    千次阅读 2017-09-26 09:42:15
    循环多不要紧,要紧的是循环嵌套得太多,要解决这个问题,需要从根本上找原因,用更好的数据结构和算法,从根源上减少对于循环的需求方法2:将循环次数多的放在里面,循环次数少的放在外面做大循环方法3:for循环中...
  • 两层for循环嵌套如何优化

    万次阅读 2018-09-11 10:37:00
    最近在项目中遇到一个需求,需要将两个数据表的数据进行比对,这涉及到了两层for循环的嵌套。一开始写得时候发现耗时久,尝试优化一下。优化的总结如下: 1.将for循环内的无关表达式提取到外面。 for(){ for...
  • for循环嵌套 简单优化

    千次阅读 2017-03-14 11:03:12
    在嵌套For循环中,将循环次数的循环放在内侧,循环次数少的循环放在外侧,其性能会提高;减少循环变量的实例化,其性能也会提高。从测试数据可知,对于两种优化方案,如果在循环次数较少的情况下,其运行效果区别...
  • android 对for循环进行优化

    万次阅读 2017-09-15 08:32:03
    今天,简单讲讲如何对for循环进行优化。 完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要。 作为三大结构之一的...
  • 多重for循环优化,提升运行效率

    万次阅读 多人点赞 2018-07-18 09:37:08
    但一旦循环次数较,比如说上万,循环层数较,效率问题就非常明显了,我是在做一个数据量非常大有三层for循环的项目的时候,为显示曲线出来花费时间,客户体验会非常不好,才研究这个情况的,事实证明,优化后...
  • 假设要生成一千万个随机数,常规的做法如下:代码如下:var numbers = [];for (var i = 0;...出现这种情况,首先想到的是优化循环体。但明显地,循环体很简单,没什么优化的余地。即使把循环体清空,提示仍然...
  • 前言我们都经常使用一些循环耗时计算的操作,特别是for循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当将大大提高效率,下面总结几条for循环的常见优化方式。首先,我们初始化一个集合...
  • 解决在for循环内判断条件次执行

    千次阅读 2021-05-23 04:49:12
    最近遇到的这个问题,就是在for循环内if判断的条件会次执行。例如,在返回的30数据中,a条目是第7条则会进行30次判断,弹出29次查无数据,也就是要点击29次关闭alert,很是让人不爽。有了下列解决办法(利用flag...
  • 要实现一个重组网址的功能,把可能出现的情况给穷举出来,下面代码已经实现(写的比较烂,请见谅),但是在网址比较长的情况下,重组网址的时候遇到大循环问题,导致内存溢出,请各位大侠给优化一下 ``` public...
  • 如何提高python 中for循环的效率

    千次阅读 2020-12-24 05:29:44
    但是对于3000万条数据,一个一个循环太消耗时间,我花了2个小时才搬运了60万数据,算算3000万我需要花费100个小时,也就需要4-5天。并且还需要保证这五天全天开机,不能出现卡机的事故。因此,需要使用并行...
  • 最外层循环必须先查出来,然后再去通过外层查询结果去分层查询。 使用时间 做过的更改测试: 1.减少查询出来的结果,发现查询时间并没有减少。估计访问数据库次数过多。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 394,765
精华内容 157,906
关键字:

for循环太多如何优化