필터 지우기
필터 지우기

Faster than find on all the colomns

조회 수: 1 (최근 30일)
Jose Santos
Jose Santos 2019년 3월 1일
댓글: Jose Santos 2019년 3월 1일
I'm tryting to find a faster way than the one I already have. So I have a big matrix, with between 4 and 16 lines and around 5K colomns, which is sparcely populated with ones. What I need to do is: The first nonzero element of each colomn is too remain one, and if there are more non-zero elements they have to be multiplied by a constant coefficient.
The way I do it now is as follows: multiply all the elements by the coefficient, and then run throught the colomns (with for ), looking for the first element to turn it back to one, with find. Like on the example below. I'm just thinking if I could not do it without having to go through all the colomns looking for the first nonzero element, as the code have to be run several times on the simulation.
a= [1] [0]
[0] [1]
[1] [0]
[0] [0]
then
a= [K] [0]
[0] [K]
[K] [0]
[0] [0]
then (with for + find)
a= [1] [0]
[0] [1]
[K] [0]
[0] [0]

채택된 답변

Andrei Bobrov
Andrei Bobrov 2019년 3월 1일
a = rand(5,15)>.7;
K = 100;
lo = cumsum(a) > 1;
a(lo) = a(lo)*K;
  댓글 수: 1
Jose Santos
Jose Santos 2019년 3월 1일
Great thanks, the example does not work with "a", as it is a logical matrix, but with my example it does work. Thanks

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Simulink에 대해 자세히 알아보기

태그

제품


릴리스

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by