Filter löschen
Filter löschen

Find the index of first and last non zero in column

2 Ansichten (letzte 30 Tage)
Teerapong Poltue
Teerapong Poltue am 2 Jun. 2021
Kommentiert: Chunru am 2 Jun. 2021
I got the array as shown
I would like to extract the index (idx) of the first and last non zero in column, how can I do that.
The expected return of the code is
data(idx_first) = [1 1 2]
data(idx_last) = [1 5 5]

Akzeptierte Antwort

Chunru
Chunru am 2 Jun. 2021
x = [0 1 0 4; 1 2 0 1; 0 1 2 0; 0 0 0 0]
[m, n] = size(x);
ind = zeros(1, n);
for i=1:n
xlast = find(x(:, i), 1, 'last');
ind(i) = sub2ind([m n], xlast, i);
end
x(ind)
  2 Kommentare
Teerapong Poltue
Teerapong Poltue am 2 Jun. 2021
ther's a tiny problem on this code when the colum is entire 0, it caused error in sub2ind. How can I solve that?
Chunru
Chunru am 2 Jun. 2021
[m, n] = size(x);
ind = nan(1, n);
for i=1:n
xlast = find(x(:, i), 1, 'last');
if ~isempty(xlast)
ind(i) = sub2ind([m n], xlast, i);
end
end
y = zeros(1,n);
ind0 = ~isnan(ind);
y(ind0) = x(ind(ind0))

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 2 Jun. 2021
A = [0 89 90 0 99 100 0] ;
id1 = find(A,1,'first')
id1 = 2
id2 = find(A,1,'last')
id2 = 6

Community Treasure Hunt

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

Start Hunting!

Translated by