Effacer les filtres
Effacer les filtres

Remove duplicate 1s from matrix columns

1 vue (au cours des 30 derniers jours)
Mitchell Crem
Mitchell Crem le 24 Jan 2021
Commenté : Image Analyst le 25 Jan 2021
Suppose I have the following logical matrix,
qq =
3×5 logical array
1 0 1 1 1
1 1 0 1 1
1 0 0 0 1
I'm trying to write a few lines which would allow me to set each column to possess only a single 1 by setting additional 1s to 0. The output should look like the following.
qq =
3×5 logical array
1 0 1 1 1
0 1 0 0 0
0 0 0 0 0
:)

Réponses (1)

Image Analyst
Image Analyst le 25 Jan 2021
Mitchell, try this:
qq = logical([...
1 0 1 1 1
1 1 0 1 1
1 0 0 0 1])
[rows, columns] = size(qq);
for col = 1 : columns
highestOne = find(qq(:, col), 1, 'first');
if ~isempty(highestOne)
qq(highestOne + 1 : end, col) = false;
end
end
qq % Show in command window.
You see:
qq =
3×5 logical array
1 0 1 1 1
1 1 0 1 1
1 0 0 0 1
qq =
3×5 logical array
1 0 1 1 1
0 1 0 0 0
0 0 0 0 0
  2 commentaires
Mitchell Crem
Mitchell Crem le 25 Jan 2021
Looks good, but I was looking for something vectorised. Apologies, I should've specified that.
Image Analyst
Image Analyst le 25 Jan 2021
And I gave it to you. Saying qq(:, col) means to get the column vector from the matrix.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Multidimensional Arrays 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