如何通过替换while循环缩短执行时间?

时间:2016-04-03 22:42:35

标签: matrix while-loop octave execution-time

我在Octave中编写了一个小代码,其中一部分是检查两个矩阵的第一行中的值是否相等,如果是,则将第二个矩阵的第二行的值加到第二个矩阵的值中第一个矩阵的一行。

这是我编写的代码的一部分,使用一小组数据:

[].forEach.call(document.querySelectorAll('.list'), function (el) {
  var txt = el.textContent;
  el.innerHTML = '<a href="#' + txt + '">' + txt + '</a>';
});

这给出了结果:

PositionLoadArray = 
1    5    3    7    4    6    9    2    1    2
1    2    3    4    5    6    7    8    9   10

X = 
0    1    2    3    4    5    6    7    8    9
0    0    0    0    0    0    0    0    0    0

x=1; #row number in matrix X
y=1; #row number in matrix PositionLoadArray

while y<=columns(PositionLoadArray)

   if PositionLoadArray(1,y)==X(1,x) 
      X(2,x)=X(2,x)+PositionLoadArray(,y);
      y=y+1;
      x=1;       
   else    
      x=x+1;    
   endif

endwhile

循环运行并且对于如上所述的小集合(即,X和PositionLoadArray的总列数(分别为x和y的最大值)较小的情况)完美地工作。但循环需要数小时才能执行更大的值。

如何减少执行时间并获得相同的结果?

1 个答案:

答案 0 :(得分:0)

尝试

 X(2, X(1,:) == Y(1,:)) += Y(2, X(1,:) == Y(1,:))