У меня есть матрица u
, я хочу просмотреть все строки и все столбцы и сделать следующее. Если элемент не равен нулю, я возвращаю значение индекса строки. Если элемент равен нулю, найдите индекс строки следующего ненулевого элемента после этого элемента. Я могу сделать это легко, используя два цикла for с функцией find. Но мне нужно делать это много-много раз (не из-за размера матрицы, а потому, что это вызывается много раз). Как я могу сделать это быстрее?
вот код цикла for:
for w=scenario_size:-1:1
for t=1:time_size
l = u(t,w) ;
if l~=0
tprime = t ;
else
tprime = t+ find(u(t:end,w),1,'first') -1 ;
end
i(t,w) = tprime ;
boo(t,w) = number(tprime,w)/u(tprime,w) ;
end
end
Пример, если один столбец равен [0,0,5,1,0,3]
, i
равен [3,3,3,4,6,6]
. Последний элемент любого столбца u
всегда ненулевой (я принудительно добавил это, искусственно добавив в конце ряд единиц).
Тогда boo
- соответствующая запись в tprime
для некоторой матрицы number
, разделенная на соответствующую u
(которая по конструкции ненулевая).