how to replace elements in top third, middle third, and bottom third of matix

80 vues (au cours des 30 derniers jours)
This question is soft-locked: new answers that are equivalent to already posted answers may be deleted without prior notice.
My task is the following:
Write a function called trio that takes two positive integer inputs n and m. The function returns a 3n-by-m matrix called T. The top third of T (an n by m submatrix) is all 1s, the middle third is all 2-s while the bottom third is all 3-s. See example below:
M = trio(2,4)
M =
1 1 1 1
1 1 1 1
2 2 2 2
2 2 2 2
3 3 3 3
3 3 3 3
This is the code that I wrote, but it only works for T = trio (4,3). I want my code to work for any input of n,m.
function T = trio (n, m)
T = randi (10, (3 * n) , m);
T ( 1:n , :) = 1;
T ( (n+1):(end-(n-1)) , :) = 2;
T ( (n+3):end, :) = 3;
end
How is it possible to call out only top third, middle third, and bottom third of any matrix?
Thank you in advance.
  6 commentaires
mahmoud khaled
mahmoud khaled le 11 Août 2020
function T=trio(n,m)
T=[ones(n,m) ; (2*ones(n,m)) ; (3*ones(n,m))];
end
Rik
Rik le 17 Août 2020
Modifié(e) : Rik le 18 Août 2020
I'm going to delete duplicate answers. I will consider the list below as the list of solutions. From the current answer section I will only leave the top one for each of these:
  1. all answer with general advice about how to solve the question
  2. answers with more than 1 vote
  3. allocating the full size array with ones or zeros and indexing into it, writing the correct values
  4. allocating the full size array with a non-standard function (like randi) and indexing into it, writing the correct values
  5. 3 and 4, but for the three parts separately, requiring concatenation
  6. kron (posted in a comment)
  7. repmat combined with implicit expansion
If new valid solutions are posted I will of course leave those as well, although I think the non-esoteric solutions may be exhausted.

Connectez-vous pour commenter.

Réponse acceptée

James Tursa
James Tursa le 1 Mai 2019
Modifié(e) : James Tursa le 1 Mai 2019
Your row indexing is wrong.
The first n rows are 1:n which you have correct.
The second n rows indexing is n more that the first set, so simply add n: n + (1:n)
The third n rows indexing is n more than the second set, which I will let you figure out (it's pretty simple)
  3 commentaires
Ammar
Ammar le 27 Sep 2023
function T = trio (n, m)
T =randi (10, (3 * n) , m)
T ( 1:n , :) = 1
T ( (n+1):2*n , :) = 2
T ( (2*n+1):end, :) = 3
end

Connectez-vous pour commenter.

Plus de réponses (6)

AYUSH GURTU
AYUSH GURTU le 28 Mai 2019
function T = trio (n, m)
T = randi (10, (3 * n) , m);
T (1:n,:) = 1;
T ((n+(1:n)),:) = 2;
T (n+(n+(1:n)):end,:) = 3;
end
  2 commentaires
sona rai
sona rai le 9 Août 2020
% sir this is right code instead of your code.
function T=trio(n,m)
T=randi(10,(3*n),m);
T(1:n,:)=1;
T((n+(1:n)),:)=2;
T((n+(n+(1:n))),:)=3;
end
t
SATHISHKUMAR S
SATHISHKUMAR S le 3 Août 2021
What is the input argument for this?

Connectez-vous pour commenter.


PRAKASH ANAND
PRAKASH ANAND le 8 Nov 2019
% That's my trio code.
%From India.
function T=trio(n,m)
x=ones(n,m);
y=2*x;
z=3*x;
T=[x;y;z];
end
  7 commentaires
Shubham
Shubham le 31 Déc 2021
Thank you brother
OUSSAMA El GABBARI
OUSSAMA El GABBARI le 19 Jan 2022
that function you made I see it's very restricted.. I wonder if it'd work for matrices of larger dimensions !

Connectez-vous pour commenter.


evan muas
evan muas le 2 Déc 2019
function T=trio(n,m)
T=[ones(n,m);2*ones(n,m);3*ones(n,m)]
end
  3 commentaires
Upoma Saha
Upoma Saha le 19 Juil 2020
this is abosulely amazing.

Connectez-vous pour commenter.


Juvraj Singh Sandhu
Juvraj Singh Sandhu le 4 Oct 2020
Modifié(e) : Juvraj Singh Sandhu le 4 Oct 2020
this will work for all inputs
function T= trio(n,m);
T1= ones(n,m);
T2= 2*ones(n,m);
T3= 3*ones(n,m);
T= [T1;T2;T3];
  2 commentaires
Hashir
Hashir le 8 Sep 2023
good try, but i dont think function will return 3n by m matrix.
Stephen23
Stephen23 le 8 Sep 2023
"but i dont think function will return 3n by m matrix."
Please show any positive integer values of m & n for which this function does not return a 3n by m matrix.

Connectez-vous pour commenter.


mayank ghugretkar
mayank ghugretkar le 5 Juin 2019
function T=trio(n,m)
T(3*n,m)=3; % or you can use random no. generation...but since we are assigning alues anyway , this vl work fine !
T(1:n,:)=1;
T((n+1):2*n,:)=2;
T((2*n+1):3*n,:)=3;
end
hope this'll help, welcome !

Doga Savas
Doga Savas le 22 Août 2019
function d = trio(n,m)
a = randi(1,n,m);
b = 2 + rand(n,m)*0;
c = 3 + rand(n,m)*0;
d = [a;b;c];
end
  3 commentaires
Rik
Rik le 8 Sep 2023
trio_even_less_baloney = @(n,m) repelem((1:3).',n,m);
n=2;m=4;
trio_even_less_baloney(n,m)
ans = 6×4
1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3
Although your point is absolutely valid.
DGM
DGM le 8 Sep 2023
Yeah, maybe I should've called it trio_reduced_baloney()
I figured repelem() was already officially exhausted. Reshaping/permuting might not be minimal, but it was a reasonable basic option that was still fair game.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Use COM Objects in MATLAB dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by