Find the index of first and last non zero in column

1 vue (au cours des 30 derniers jours)
Teerapong Poltue
Teerapong Poltue le 2 Juin 2021
Commenté : Chunru le 2 Juin 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]

Réponse acceptée

Chunru
Chunru le 2 Juin 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 commentaires
Teerapong Poltue
Teerapong Poltue le 2 Juin 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 le 2 Juin 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))

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 2 Juin 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