Delete last n1,n2,n3 (...) elements in each row in a Matrix in an efficient way or set to zero

1 view (last 30 days)
I've a large set of data and i want to remove from the end of each row a different amount of elements (0-n). Is there a fast way to do this without using a loop?
As an example: A= % In reality different numbers, not only ones!
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Then I've a vector saying how many elements to delete from each row, e.g.:
B =
1 3 0 2 1
So the result would look like:
A2
1 1 1 1 0
1 1 0 0 0
1 1 1 1 1
1 1 1 0 0
1 1 1 1 0
Thanks so much in advance!

Accepted Answer

Roger Stafford
Roger Stafford on 22 Feb 2014
[m,n] = size(A);
p = cumsum(accumarray([(1:m)',n+1-B'],1,[m,n+1]),2);
A(p(:,1:n)==1) = 0;

More Answers (1)

Image Analyst
Image Analyst on 21 Feb 2014
As long as you want to simply set to zero, no need to use cell arrays:
A=[...
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1]
B =[1 3 0 2 1];
for row = 1 : size(A, 2)
A(row,(end-B(row)+1):end) = 0;
end
A % Print to command window.

Categories

Find more on Characters and Strings 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!