Creating a mxn matrix that is all zeros except for the middle row and middle column which are 1s

조회 수: 46(최근 30일)
Hi,
Given an 7x5 matrix, i am to return a mxn matrix M that is all zeros except for the middle row and middle column, which should be all 1s.
I have gotten as far as creating a zeros matrix using the code M=zeros(7,5), but am clueless on how to change the middle row and middle column to 1s.
I should also mention that the code should be a one-liner.
Thank you

채택된 답변

Wan Ji
Wan Ji 2021년 8월 28일
편집: Wan Ji 2021년 8월 28일
M = [0,0,0,1,0,0,0; 0,0,0,1,0,0,0; 1,1,1,1,1,1,1; 0,0,0,1,0,0,0; 0,0,0,1,0,0,0];
Once for all
Or you can do
a = zeros(5,7);
a((1:numel(a))>size(a,1)*(size(a,2)-1)/2&1:numel(a)<=size(a,1)*(size(a,2)+1)/2|mod(1:numel(a),size(a,1))==(size(a,1)+1)/2) = 1
The result is
a =
0 0 0 1 0 0 0
0 0 0 1 0 0 0
1 1 1 1 1 1 1
0 0 0 1 0 0 0
0 0 0 1 0 0 0
We can extend it to any matrix with both odd columns and rows.
a = zeros(9,11);
a((1:numel(a))>size(a,1)*(size(a,2)-1)/2&1:numel(a)<=size(a,1)*(size(a,2)+1)/2|mod(1:numel(a),size(a,1))==(size(a,1)+1)/2) = 1
Then a becomes
a =
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0

추가 답변(1개)

Awais Saeed
Awais Saeed 2021년 8월 28일
M = zeros(7,5)
M(:,ceil(size(M,2)/2)) = 1
M(ceil(size(M,1)/2),:) = 1
  댓글 수: 4
Awais Saeed
Awais Saeed 2021년 8월 28일
This is the shortest code that I can come up with. Why do you need a one line answer? You are not doing it through loops, this is vectorisation which is far better and faster than loops. It is more readable as well.

댓글을 달려면 로그인하십시오.

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by