Matrix column selection based on vector with indices

1 回表示 (過去 30 日間)
Dominik Rhiem
Dominik Rhiem 2022 年 10 月 10 日
編集済み: Torsten 2022 年 10 月 11 日
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?

採用された回答

Torsten
Torsten 2022 年 10 月 11 日
編集済み: Torsten 2022 年 10 月 11 日
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

その他の回答 (1 件)

David Hill
David Hill 2022 年 10 月 10 日
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 件のコメント
Torsten
Torsten 2022 年 10 月 10 日
編集済み: Torsten 2022 年 10 月 10 日
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 2022 年 10 月 11 日
Hi, thanks for your answers! While that solves the problem, is there maybe a way to do that without a loop?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangePolynomials についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by