How to find indices of a rectangular region inside big matrix? | Efficiently
12 views (last 30 days)
Show older comments
How can indices of elements belong to a rectangular region can be found?
A = [4 4 4 4 4 4 4
4 1 1 1 1 3 0
4 1 3 3 1 3 0
4 1 3 3 1 3 0
4 1 1 1 1 3 0
4 4 4 4 4 4 4];
Input: Matrix's size[height, width] , [Row_start Row_end], [Col_start Col_end]
Output: [21 22 23 27 28 29 33 34 35]
Why efficiently : to do same for multiple combinations of rows & columns
Thank you
4 Comments
Caglar
on 2 Nov 2018
I am not sure If I understood what you are asking for. If you want to get a part of a matrix you can do it like A(3:5,4:6) .
Accepted Answer
Bruno Luong
on 2 Nov 2018
Edited: Bruno Luong
on 2 Nov 2018
recidx = (Row_start:Row_End)' + height*(Col_start-1:Col_end-1)
6 Comments
More Answers (2)
Geoffrey Schivre
on 2 Nov 2018
Hello,
I'm not sure if it's efficient enough but try :
p = nchoosek([Row_start:Row_end,Col_start:Col_end],2);
idx = unique(sub2ind(size(A),p(:,1),p(:,2)));
Geoffrey
5 Comments
Geoffrey Schivre
on 2 Nov 2018
Sorry, I didn't refresh this page so I didn't see that your question was answered. I'm glad you find what you ask for !
Caglar
on 2 Nov 2018
Edited: Caglar
on 2 Nov 2018
function result = stack (A,row_start,row_end,col_start,col_end)
% A = [4 4 4 4 4 4 4
% 4 1 1 1 1 3 0
% 4 1 3 3 1 3 0
% 4 1 3 3 1 3 0
% 4 1 1 1 1 3 0
% 4 4 4 4 4 4 4];
% row_start=3; col_start=4;
% row_end=5; col_end=6;
height=(size(A,1));
result=(row_start:row_end)+(height)*((col_start:col_end)'-1);
result=transpose(result); result=result(:);
end
0 Comments
See Also
Categories
Find more on Get Started with MATLAB 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!