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

1 Ansicht (letzte 30 Tage)
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!

Akzeptierte Antwort

Roger Stafford
Roger Stafford am 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;

Weitere Antworten (1)

Image Analyst
Image Analyst am 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.

Kategorien

Mehr zu Matrices and Arrays 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