How to get a subarray from a matrix
    56 views (last 30 days)
  
       Show older comments
    
Hi. I am looking to solve this Question: Write a function called top_right that takes two inputs: a matrix N and a scalar non-negative integer n, in that order, where each dimension of N is greater than or equal to n. The function returns the n-by-n square array at the top right corner of N.
So I am looking to take the top right portion of matrix N to get a subarray that is n by n units. I thought the code might look like this:
function M = top_right(N,n)
M = N(end-n+1:end, 1:n);
However, this gives me the bottom left of the matrix and i want the top right.
6 Comments
  Vijay Ramanathan
 on 2 Oct 2017
				I was trying M= [N(1:n,end-n+1:end)] with M= [N(1:n,end-n:end)] before i saw your answer. I thought it wont apply for all but later it did :) Thanks Karthik and Yasin
Answers (3)
  James Tursa
      
      
 on 5 Aug 2016
        
      Edited: James Tursa
      
      
 on 5 Aug 2016
  
      Switch your row and column indexing. E.g.
M = N(1:n,end-n+1:end);
0 Comments
  Star Strider
      
      
 on 5 Aug 2016
        That’s different than the wording of your earlier Question.
As far as the indexing code, see if this does what you want:
N = randi(99,8,6)                           % Argument Matrix
[R,C] = size(N);
min_dim = min(R,C);
n = randi(min_dim-1)                        % Argument Parameter
M = N(1:n, C-n+1:C)                         % Return Top Right Corner Square Matrix
N =
      79    65    20    86    17     8
      10    49     4    80    97    52
      26    78    74    58    71    10
      34    71    50    19    50    81
      68    90    48    24    47    81
      14    89    90    88     6    72
      72    34    61     3    68    15
      11    70    62    49     5    66
n =
       3
M =
      86    17     8
      80    97    52
      58    71    10
0 Comments
  Aakriti Mittal
 on 30 May 2018
        function N=top_right(M,n) T = M(1:n,1:n); N=T; Try this code...Hopefully it will work.. Aakriti
1 Comment
  Guillaume
      
      
 on 30 May 2018
				- please learn to format your answer
 - You're answering a two year old question. Hopefylly, the OP is still not waiting for an answer
 - Your function returns the top left portion of the matrix, not the top right
 - What is the point of
 
T = ...; 
N = T;
? Why not write directly
N = ...;
and not have an intermediate variable that serves zero purpose?
See Also
Categories
				Find more on Logical 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!