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

4 vues (au cours des 30 derniers jours)
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 commentaires
Caglar
Caglar le 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) .
JAI PRAKASH
JAI PRAKASH le 2 Nov 2018
Sorry if I am not clear in my question.
I want linear indices of all the elements present in rectangular region.
e.g

Connectez-vous pour commenter.

Réponse acceptée

Bruno Luong
Bruno Luong le 2 Nov 2018
Modifié(e) : Bruno Luong le 2 Nov 2018
recidx = (Row_start:Row_End)' + height*(Col_start-1:Col_end-1)
  6 commentaires
JAI PRAKASH
JAI PRAKASH le 3 Nov 2018
Hi @Bruno
Do you have some idea for below question also.
Which is nothing but continuation of the problem, that you solved just now.
Bruno Luong
Bruno Luong le 3 Nov 2018
James's solution is very well. I doubt I can do better.

Connectez-vous pour commenter.

Plus de réponses (2)

Geoffrey Schivre
Geoffrey Schivre le 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 commentaires
Geoffrey Schivre
Geoffrey Schivre le 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 !
JAI PRAKASH
JAI PRAKASH le 2 Nov 2018
Ya, But I learn interesting things from your comments.
'nchoosek' is new to me
Thanks

Connectez-vous pour commenter.


Caglar
Caglar le 2 Nov 2018
Modifié(e) : Caglar le 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

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Produits


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by