Function like "find" but for lines

Hi everyone, I need a function that starts counting every element in an array (each line), and when it finds 0, it can skip it.
ex: A = [6 5 0 1; 3 1 0 0; 12 0 100 20]
newA = [ 1 2 4 5 6 9 11 12]
I was trying something like this:
k = 0;
colind = 1:numel(A);
colind(A!=k)
But it only takes me each column in the matrix.
wrong: newA = [1 2 3 4 5 9 10 12]
I want to count my elements on each line of the matrix. A little help please! :)

 Accepted Answer

>> B = find(A.').'
B =
1 2 4 5 6 9 11 12

4 Comments

And if i want to reset count on each line?
something like this:
A = [100 0 0 2 0; 3 4 0 5 0; 6 0 7 8 9; 0 0 10 11 0; 0 0 0 0 12]
newA= [1 4 1 2 4 1 3 4 5 3 4 5]
>> [B,~] = find(A.');
>> B = B.' % optional
B =
1 4 1 2 4 1 3 4 5 3 4 5
Good for us to learn :)
Yeah, thanks a lot :D

Sign in to comment.

More Answers (2)

B=reshape(A.',1,[]);
C=(1:numel(A)).*(B~=0);
C=C(C~=0)
Ameer Hamza
Ameer Hamza on 7 Apr 2020
Edited: Ameer Hamza on 7 Apr 2020
new_A = find(A')

2 Comments

And if i want to reset count on each line?
something like this:
A = [100 0 0 2 0; 3 4 0 5 0; 6 0 7 8 9; 0 0 10 11 0; 0 0 0 0 12]
newA= [1 4 1 2 4 1 3 4 5 3 4 5]
The functionality of find function is the same, so
[new_A,~] = find(A');

Sign in to comment.

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!