Find the index of first and last non zero in column

4 vues (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

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by