how to replace elements in top third, middle third, and bottom third of matix
150 views (last 30 days)
Show older comments
Marlon Izaguirre
on 1 May 2019
Commented: OUSSAMA El GABBARI
on 19 Jan 2022
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 Comments
Rik
on 17 Aug 2020
Edited: Rik
on 18 Aug 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:
- all answer with general advice about how to solve the question
- answers with more than 1 vote
- allocating the full size array with ones or zeros and indexing into it, writing the correct values
- allocating the full size array with a non-standard function (like randi) and indexing into it, writing the correct values
- 3 and 4, but for the three parts separately, requiring concatenation
- kron (posted in a comment)
- 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.
Accepted Answer
James Tursa
on 1 May 2019
Edited: James Tursa
on 1 May 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)
2 Comments
More Answers (7)
AYUSH GURTU
on 28 May 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 Comments
PRAKASH ANAND
on 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 Comments
OUSSAMA El GABBARI
on 19 Jan 2022
that function you made I see it's very restricted.. I wonder if it'd work for matrices of larger dimensions !
mayank ghugretkar
on 5 Jun 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 !
1 Comment
Doga Savas
on 22 Aug 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
0 Comments
Juvraj Singh Sandhu
on 4 Oct 2020
Edited: Juvraj Singh Sandhu
on 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];
0 Comments
SADIQ GBAGBA
on 4 Mar 2020
function[T]= trio(n,m)
T=ones(3*n,m);
T(n+1:2*n,:)=2;
T(n+n+1:3*n,:)=3;
end
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!