How to get a subarray from a matrix

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 comentarios

yasin Sanjar
yasin Sanjar el 22 de Feb. de 2017
try M= [N(1:n,end-n+1:end)]
aklapaz
aklapaz el 17 de Mzo. de 2017
Hi Sanjar, could you explain the logic behind this part of your script?: end-n+1:end
Thanks
Karthik  Subramanian
Karthik Subramanian el 16 de Mayo de 2017
Lets say you have 5 columns. Top right and n=2 means you need last two columns. So you should count till end and you start from the last before column which is end-n+1 = 5-2+1 = 4 . As you need columns 4 and 5.
Vijay Ramanathan
Vijay Ramanathan el 2 de Oct. de 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
Stephen23
Stephen23 el 2 de Oct. de 2017
In all of the above comments the square brackets are superfluous.

Iniciar sesión para comentar.

Respuestas (3)

James Tursa
James Tursa el 5 de Ag. de 2016
Editada: James Tursa el 5 de Ag. de 2016
Switch your row and column indexing. E.g.
M = N(1:n,end-n+1:end);
Star Strider
Star Strider el 5 de Ag. de 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
Aakriti Mittal
Aakriti Mittal el 30 de Mayo de 2018

0 votos

function N=top_right(M,n) T = M(1:n,1:n); N=T; Try this code...Hopefully it will work.. Aakriti

1 comentario

  • 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?

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 5 de Ag. de 2016

Comentada:

el 30 de Mayo de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by