首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >去掉循环

去掉循环
EN

Stack Overflow用户
提问于 2021-03-24 13:53:00
回答 1查看 42关注 0票数 0

我需要消除Matlab代码中的循环。在这个过程中,我遇到了以下问题。以下是代码的一部分

代码语言:javascript
复制
Nx=11; Ny=11; 
A=rand(Ny,Nx);
A1=A;
 
       for j=2:Ny-1      
       for i=2:Nx-1
          A(j,i)=A(j,i-1);
       end;
       end;
 
A1(2:Ny-1,2:Nx-1)=A1(2:Ny-1,1:Nx-2);
 
A2=A-A1;

我知道A不等于A1。右侧的j-1索引的情况也是如此。但是,如果我们使用索引i + 1j + 1,那么一切都很好。

EN

回答 1

Stack Overflow用户

发布于 2021-03-25 07:37:34

问题相对简单:您一次将A1的所有列都向右移动(在过程中将第1列复制到第2列并丢弃列Nx-1 ),而for循环则将A的列从左到右一次向右移动一列。这意味着首先用第1列的内容覆盖第2列,然后用第2列的内容覆盖第3列,依此类推,最后得到第一列的Nx-1副本。(当我提到复制/移动/丢弃列时,我指的是从行2到行Ny-1的值。)

正如您已经注意到的,如果您修改您的循环以将列向左移动,即

代码语言:javascript
复制
for j=2:Ny-1
  for i=2:Nx-1
    A(j,i)=A(j,i+1);
%...

那么这个问题就不会发生,因为在用新值覆盖它们之前,您有机会读取任何给定列的原始内容并将它们保存到其他地方。

for循环从左到右迭代列时,上述所有结果都适用。如果您反转迭代的方向,即

代码语言:javascript
复制
%...
  for i=Nx-1:-1:2
    A(j,i)=%...

然后,向右移动列按预期工作,而将它们向左移动会产生虚假的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66775420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档