How to find indices of a rectangular region inside big matrix? | Efficiently

9 次查看(过去 30 天)
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 个评论
Caglar
Caglar 2018-11-2
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) .
JAI PRAKASH
JAI PRAKASH 2018-11-2
Sorry if I am not clear in my question.
I want linear indices of all the elements present in rectangular region.
e.g

请先登录,再进行评论。

采纳的回答

Bruno Luong
Bruno Luong 2018-11-2
编辑:Bruno Luong 2018-11-2
recidx = (Row_start:Row_End)' + height*(Col_start-1:Col_end-1)
  6 个评论

请先登录,再进行评论。

更多回答(2 个)

Geoffrey Schivre
Geoffrey Schivre 2018-11-2
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 个评论
Geoffrey Schivre
Geoffrey Schivre 2018-11-2
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
Caglar 2018-11-2
编辑:Caglar 2018-11-2
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

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

标签

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by