Effacer les filtres
Effacer les filtres

Matrix column selection based on vector with indices

2 vues (au cours des 30 derniers jours)
Dominik Rhiem
Dominik Rhiem le 10 Oct 2022
Modifié(e) : Torsten le 11 Oct 2022
Hi all. I have a matrix of size m x n, with all entries as one at initialization. I also have a vector of size 1 x m. Each element is supposed to be between 1 and n, and the corresponding matrix entries are set to 0 (i.e. in the m-th matrix row, this is the column given by the m-th element of the vector). The code for that:
mask(sub2ind(size(mask),(1:numel(vector.'))',vector.')) = 0;
However, due to some modifications I had to make to the code, some elements of the vector can now take a value of 0, i.e. an invalid index. I would simply like to skip those elements. How can I do that?

Réponse acceptée

Torsten
Torsten le 11 Oct 2022
Modifié(e) : Torsten le 11 Oct 2022
k=ones(6,4);
v=randi(size(k,2),1,size(k,1));
v(end) = 0
v = 1×6
3 2 2 2 1 0
idx = find(v>0)
idx = 1×5
1 2 3 4 5
k(sub2ind(size(k),idx,v(idx))) = 0
k = 6×4
1 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1

Plus de réponses (1)

David Hill
David Hill le 10 Oct 2022
Why not just a simple loop?
k=ones(10,14);
v=randi(size(k,2),1,size(k,1));
for j=1:size(k,1)
k(j,v(j))=0;
end
  2 commentaires
Torsten
Torsten le 10 Oct 2022
Modifié(e) : Torsten le 10 Oct 2022
According to the OP, there can be zeros in the v-vector:
k=ones(3,5);
v=randi(size(k,2),1,size(k,1));
v(end) = 0;
for j=1:size(k,1)
if v(j) > 0
k(j,v(j))=0;
end
end
v
v = 1×3
2 5 0
k
k = 3×5
1 0 1 1 1 1 1 1 1 0 1 1 1 1 1
Dominik Rhiem
Dominik Rhiem le 11 Oct 2022
Hi, thanks for your answers! While that solves the problem, is there maybe a way to do that without a loop?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating 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