Delete last n1,n2,n3 (...) elements in each row in a Matrix in an efficient way or set to zero
조회 수: 5 (최근 30일)
이전 댓글 표시
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!
댓글 수: 0
채택된 답변
Roger Stafford
2014년 2월 22일
[m,n] = size(A);
p = cumsum(accumarray([(1:m)',n+1-B'],1,[m,n+1]),2);
A(p(:,1:n)==1) = 0;
댓글 수: 0
추가 답변 (1개)
Image Analyst
2014년 2월 21일
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.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!