Filter löschen
Filter löschen

Matrix column selection based on vector with indices

2 Ansichten (letzte 30 Tage)
Dominik Rhiem
Dominik Rhiem am 10 Okt. 2022
Bearbeitet: Torsten am 11 Okt. 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?

Akzeptierte Antwort

Torsten
Torsten am 11 Okt. 2022
Bearbeitet: Torsten am 11 Okt. 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

Weitere Antworten (1)

David Hill
David Hill am 10 Okt. 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 Kommentare
Torsten
Torsten am 10 Okt. 2022
Bearbeitet: Torsten am 10 Okt. 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 am 11 Okt. 2022
Hi, thanks for your answers! While that solves the problem, is there maybe a way to do that without a loop?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by