精华内容
下载资源
问答
  • MATLAB for循环的改善方法

    千次阅读 2020-04-20 01:19:24
    MATLAB for循环的改善方法 前端时间做了大数据仿真计算,计算了百万个样本,其中采用了for循环结构,居然花费了半天的时间才运行完,那么如何改善这个循环体使它能花费更短的时间来运行。我采用了将for循环改变成...

    MATLAB for循环的改善方法

    前段时间做了大数据仿真计算,计算了百万个样本,其中采用了for循环结构,居然花费了半天的时间才运行完,那么如何改善这个循环体使它能花费更短的时间来运行。我采用了将for循环改变成多维向量计算的方法。
    测试代码(截取)如下:

    for step=1:100
    	sigma=0;
    	data_f1=[];
    data_f2=[];
    data_f=[];
    for i=1:m;
            if ((i>=(step+1))&(i<=m-step))
                for j=-step:step
                    sigma=sigma+(csv(i-j,3)-1)^2;
                end
                  f1=(sigma./(2*step)).^0.5;  
    data_f1=[data_f1;f1];
                 sigma=0;
            else
                f2=abs(csv(i,3)-1);
                data_f2=[data_f2;f2];
                end
            data_f=[data_f2(1:step,:);data_f1;data_f2((step+1):(2*step),:)];
             [P1_fi,p]=corr(csv(1:m,1),data_f);
    	data_corr=[data_corr;P1_fi];
    end
    

    我们看到,在这个结构中,为了计算样本在定义公式下的值,包含有3个for循环嵌套结构和一个if条件语句,尽管工作重复但是在上百万个样本下Matlab运行速度还是非常慢的。
    现在的代码可以看作是一个很长的一维向量逐个做着重复的计算,那么改进的思想就是把计算模型升几个维度,变成多维向量,相当于把百万个样本同时输入,按照条件语句选择计算路径。
    改进代码如下:

    for step=1:100%在1-100步进范围内,找到fai相关系数最大值所取的步长
        i=(step+1):(m-step); %第一种情况,i在区间内
        j=-step:step;
        sigma=zeros(m-2*step,1);
        i_x1=(ones(length(j)));
        i_x2=i'.*(i_x1(1,:));
        i_x3=ones(length(i),length(j));
        sigma=(filename(i_x2-j.*i_x3,3)-1).^2;
        sigma_juzhen=reshape(sigma',m-2*step,2*step+1);
        f1=(sum(sigma_juzhen,2)./(2*step)).^0.5;
        data_f1=f1;
        
        i2=1:step;
        i2=[i2,(m-(step-1)):m];
        f2=abs(filename(i2,3)- mean(filename(:,3)));
        data_f2=[data_f2;f2];
           
        data_f=[data_f2(1:step,:);data_f1;data_f2((step+1):(2*step),:)];
        [P1_fi,p]=corr(filename(1:m,1),data_f);
        
        data_corr=[data_corr;P1_fi];
        end
    

    这样,我们将原来的for全部用向量代替,把简单的条件语句直接转化为分路后的计算模型,把原来“细水长流”式的逐个计算变为整体并行的多路计算,极大降低了程序运行时间,本研究模型也从半天多的运行时间优化为秒级运行时间。
    所以在遇到大数据下的循环体计算,不妨可以转换为多维矢量,通过极短时间计算机负荷工作来换取更短的运行时间是提高程序可靠性的一个省时省力的好方法。

    展开全文
  • 本代码主要利用MATLAB工具实现MATLAB——求解for嵌套循环,简单明了,易于理解
  • 在画图前使用下列命令改变Matlab默认的属性,这个属性会在Matlab重启后被重置(成默认属性) set(0,'DefaultAxesLineStyleOrder','-|-.|--|:'); 注:且在每个plot后面在加上hold all 例子: set(0,'...

    在画图前使用下列命令改变Matlab默认的属性,这个属性会在Matlab重启后被重置(成默认属性)
    set(0,'DefaultAxesLineStyleOrder','-|-.|--|:');
    注:且在每个plot后面在加上hold all
    例子:
    set(0,'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1],...
         'DefaultAxesLineStyleOrder','-|--|:')
    %这里为便于理解,所以也改变了颜色的默认属性,颜色一般不用改变;
    t = 0:pi/20:2*pi;
    for i = 1:9
        x = sin(t-i/5)';
       plot(t,x)
        hold all
    end
    legend('show')

    当然如果想在重启前改回Matlab默认的属性,可以在画完图后使用:
    set(0,'DefaultAxesLineStyleOrder','remove')
    set(0,'DefaultAxesColorOrder','remove')

    展开全文
  • for循环代码 使用MCNN进行Crowd Counting 安志成 github地址: 本文主要基于https://github.com/svishwa/crowdcount-mcnn; 该项目是对CVPR 2016 paper "Single Image Crowd Counting via Multi Column ...
  • Matlab for循环plot输出

    万次阅读 2019-03-30 22:47:29
    f1 = 1:35;...for i=1:length(f1); (循环内容) end figure %因为矩阵从1开始 故需要回减1 plot(f1-1,a11,f1-1,a10); ylabel('纵坐标信息'); xlabel('横坐标信息'); f1为设置的长度。用f1的长...
    f1 = 1:35;
    v11(1) = 0;
    v10(1) = 0;
    x11(1) = 74;
    x10(1) = 66.6;
    
    for i=1:length(f1);
        (循环内容)
    end
    figure
    %因为矩阵从1开始 故需要回减1
    plot(f1-1,a11,f1-1,a10);
    
    ylabel('纵坐标信息');
    xlabel('横坐标信息');
    

    f1为设置的长度。用f1的长度作为for循环的范围。

    展开全文
  • matlab for循环其实并不慢

    万次阅读 多人点赞 2016-09-23 11:12:08
    matlab for循环其实并不慢,首先matlab是一个解释性语言,变量不需要提前申明,这也就是导致很多人误认为matlab for循环很慢的。其实是错误的认识! 原因:因为matlab循环中变量没有预先声明,导致在循环中数组大小...

    matlab for循环其实并不慢,首先matlab是一个解释执行性语言,变量不需要提前申明,这也就是导致很多人误认为matlab for循环很慢的。其实是错误的认识!

    原因:因为matlab循环中变量没有预先声明,导致在循环中数组大小不断变化,当大小增长时,当前数组可能需要复制到新的更大的连续内存中,这显然会导致不必要的开销。如果数组长度较短,发生上述复制过程的次数少一些,而且发生时需要复制的内容也短,所以减速不太明显。如果很长会怎么样不难想象,同时也能想到如果预先声明足够大的数组则可以避免这一过程。


    以上是参考了以下内容:

    http://www.zhihu.com/question/33193085


    自己测试的结果:

    # cat tmp1.m

    clear all; clc;

    tic;
    a = [];
    for i = 1 : 200000
        a(i) = i + 1;
    % a = [a i + 1];
    end
    toc;

    运行tmp1.m,耗时 0.079107 seconds.


    # cat tmp2.m

    clear all; clc;

    tic;
    a = [];
    for i = 1 : 200000
    %     a(i) = i + 1;
        a = [a   i + 1];
    end
    toc;

    运行tmp2.m,耗时 20.464098 seconds.


    从以上对比可以看出,matlab for循环耗时,还是因为for循环内存要执行的语句耗时导致的!tmp2.m之所以耗时,是因为a矩阵需要向系统申请足够大的连续内存,会发生数据的复制操作,所以比较耗时!

    最后,也可以看出,tmp1.m是tmp2.m的一种解决方案!


    欢迎大家留言讨论!

    展开全文
  • for i = 1 : 5 m_=num2str(i); n_=strcat('E:\最后一次/度分布/第4次度分布/吞吐量的画图代码/1Result/','1分配',m_,'结果','.txt'); fid=fopen(n_,'w'); a = 3; fprintf(fid,'%f',a); fclose(fid); en...
  • Matlab for循环画图加legend

    千次阅读 2018-11-17 17:21:00
    x = 1:10; for i = 1:4 y = i*x; h = plot(x,y); ...legend(h([1,2,3,4]),'y1','y2','y3','y4') ... 在 for 循环中根据循环改变 legend,效果图如下 转载于:https://www.cnblogs.com/qinghev/p/997...
  • matlab for循环过大程序运行慢解决方案

    万次阅读 多人点赞 2017-04-23 09:09:38
    实验室经常需要使用到matlabfor循环非常慢,自己找了一些matlabfor循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到的问题~。 方法1:循环多不要紧,要紧的是循环嵌套得...
  • 9.5MATLAB for循环结构

    千次阅读 2016-12-05 21:12:52
    for循环结构是针对大型运算相当有效的运算方法。MATLAB中提供的循环结构有for'循环结构和while循环结构两种。for循环重复执行一组语句一个预先给定的次数,匹配的end描述该语句。 for循环的具体语法结构如下: for...
  • for循环代码 Tensor-Completion-for-Estimating-Missing-Values-in-Visual-Data Tensor Completion by Python and Numba 本文的算法来自Liu等的两篇论文中的HaLRTC(其余算法会在之后补全) The algorithm in this ...
  • Matlab for循环subplot画图加标题

    千次阅读 2018-11-19 15:12:00
    x=1:10; for i = 1:4 y=i*x; subplot(2,2,i) plot(x,y) title(sprintf('y=%i x\n',i)) end  效果如图 转载于:https://www.cnblogs.com/qinghev/p/9983216.html
  • MATLAB中输入一下语句 ``` for a=0.001:0.001:1 if a==0.01 fprintf('lalala') ...但是,把第2行中的a==0.01换成 a=0.02,就能打印出来 “lalala”了。...为什么for循环里面判断语句会出错呢,还是我的代码有问题
  • 在这个程序中,我们可以通过 for 循环编写数组。有时我们需要通过 for 循环编写数组,用于 routhz 标准 nyquist 图、传递函数等。这对此很有帮助。
  • for循环代码 图像去遮挡 本项目用FMM算法和criminisi算法实现图像修复 可执行程序 可程序程序带有UI用户界面,在Windows系统下打开“可执行程序\mygui\for_testing\mygui.exe”来使用。 在下拉框中选择要处理的图片...
  • matlab——for循环

    万次阅读 多人点赞 2019-10-20 14:57:52
    简单for循环 for循环用来循环处理数据。 例:输出1~100的和 >> clear >> sum = 0; >> for i = 1:100 sum = sum +i; end >> sum sum = 5050 解释:i从1到100,每次增加一个,该共循环...
  • matlab for语句实现循环

    千次阅读 2020-01-14 22:31:18
    for 循环变量=表达式1:表达式2:表达式3 %初值:步长:终值, 变量将逐个赋给循环变量 循环体语句 %重复执行语句 end 说明: 向量中有几个元素,执行几次循环体 退出循环后,循环变量就是最后的元素值 当向量为空时...
  • matlab for循环的三种类型

    千次阅读 2015-10-05 15:09:00
    网址:http://www.yiibai.com/matlab/matlab_for_loop.html ----分割线------------------------ 今天在测试时发现一个很有趣的问题: 文件命名是不能用关键字的,我命名一个文件为for.m,结果,无论如何都提示有...
  • if (opts.progress) progress = waitbar(0,'Executing Algorithm...'); end if (opts.progress) if mod(t, 50) == 0 waitbar((t/n)); end end 
  • length() 与在 for 循环中使用时存储的数组长度。 这将最终表明存储长度比在 for 循环中使用 length() 快 17 倍,比使用 size() 快 22 倍。 必须通过在 for 循环中使用 size() 和 length() 来权衡代码节省。 当只...
  • % ii ---循环变量,也就是循环次数 % N ---N的阶乘 % N_factorial --计算N的阶乘 clc;clear; %N的阶乘,以后封装为函数 N=5; N_factorial=1; for ii = 1:N N_factorial = N_factori...
  • MATLAB循环语句允许我们多次执行一个语句或语句组。 在一般的情况下,程序中的语句都是按照顺序执行的,先从函数中的第一条语句开始执行,然后执行第二条并且依次类推。但是也会存在一种情况:需要多次执行代码块,...
  • matlab for循环 比较不一样

    千次阅读 2013-05-16 01:09:07
    matlab循环语句 while for 条件语句 if break continue 基本跟c语言差不多 就这个for很奇葩  如果是(例子借鉴别人的http://zhiqiang.org/blog/it/for-in-matlab.html) i = 3; for i = 1:i i=2*i end ...
  • 每当for循环一次,就做一个间隔,这样可以方便后来调用
  • matlabfor循环

    万次阅读 2018-07-22 20:23:15
    https://blog.csdn.net/zhyoulun/article/details/78606382
  • MATLAB中的for循环

    2021-07-25 16:02:40
    MATLAB中的for循环 格式 for i=开始:步长(步长为1可省略):结束          。。。。 end 示例1 输出1至10 代码 输出 示例2 输出10以内的奇数 代码 输出
  • 其中的 i=i+5 这一行不会改变for循环中i的值,for循环变量i会取哪些值,是第一次进入循环时就决定了的。无论在循环中做什么事都不会改变循环的起始,中止,或步长值。要想实现想要的功能,可以使用while ...
  • 给出了matlab跳出循环的几种方式的比较

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,020
精华内容 9,608
关键字:

matlabfor循环

matlab 订阅