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

조회 수: 46(최근 30일)
Lavorizia Vaughn 2021년 8월 28일
댓글: Awais Saeed 2021년 8월 28일
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 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 2021년 8월 28일
M = zeros(7,5)
M(:,ceil(size(M,2)/2)) = 1
M(ceil(size(M,1)/2),:) = 1
##### 댓글 수: 4표시숨기기 이전 댓글 수: 3
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.

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

### 범주

Find more on Matrix Indexing in Help Center and File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!

Translated by