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

5 vues (au cours des 30 derniers jours)
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!

Réponse acceptée

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

Plus de réponses (1)

Image Analyst
Image Analyst le 21 Fév 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.

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by