How to set elements of a matrix to 0 from one index to the remaining of the row ?

2 views (last 30 days)
Hi, I'm working on a large sparse matrix. I'm wondering if there is a fast way to set elements of a matrix to 0 from one given index (dependent on the row) to the remaining of the row ?
For each row, I have a linear index and I would like to set all the elements from this index to the end of the row to 0. Obviously you can achieve that with a for loop (see the code) but for efficiency reasons, I was wondering if there were a faster solution for that! Any idea?
X % sparse matrix of size m x n
Indexes % Linear Indexes of size m x 1
size_X=size(X);
[~,Column_Index]=ind2sub(size_X,Indexes); % get the column number of each Indexes
for i=1:length(Indexes)
X(i,Column_Index(i):end)=0;
end
For example, if
X =[
1 3 -1 1
22 2 2 2
3 3 3 3]
and
Indexes =[
7
2
9]
X should become:
1 3 0 0
0 0 0 0
3 3 0 0

Accepted Answer

Matt J
Matt J on 22 Feb 2019
Edited: Matt J on 22 Feb 2019
[I,J,S]=find(X);
keep=(J<Column_Index(I));
X=sparse(I(keep), J(keep), S(keep) ,m,n);

More Answers (0)

Categories

Find more on Sparse Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!