Как сократить время выполнения, заменив цикл while?

Я написал небольшой код в Octave, и его часть проверяет, равны ли значения в первых строках двух матриц, и если да, добавляя значение второй строки второй матрицы к значению второй строки первая матрица

Это та часть кода, которую я написал, используя небольшой набор данных:

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 =
0    1    2    3    4    5    6    7    8    9
0   10   18    3    5    2    6    4    0    7

Цикл работает и отлично работает для небольших наборов, подобных приведенному выше (т. Е. Когда общее количество столбцов для X и PositionLoadArray (макс. Значения x и y соответственно) невелико). Но цикл занимает часы, чтобы выполняться с большими значениями.

Как я могу сократить время выполнения и получить тот же результат?

1 ответ

Пытаться

 X(2, X(1,:) == Y(1,:)) += Y(2, X(1,:) == Y(1,:))
Другие вопросы по тегам