How to create a checkerboard matrix without inbuilt function.
이전 댓글 표시
I just want to write this matrix, but want to do it using for loops
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
댓글 수: 8
Riley Smith
2017년 9월 12일
Stephen23
2017년 9월 12일
@Riley Smith: so try both of them. What is stopping you from trying things out? MATLAB does not explode if your first attempt does not work.
Adam
2017년 9월 12일
This is one of those problems where there is a vast number of different ways to try it. Many that give the right answer and many that give the wrong answer, but command line testing is free. My first attempt yielded the wrong answer as I forgot that the value at the end of a column is equal to that at the start of the next column. But a little tweak soon fixes those problems and experimenting is fun and good for learning.
James Tursa
2017년 9월 12일
If you get stuck, or just want to see how others have done this:
Rik
2017년 9월 12일
Also, the criterion restricting the use of builtins makes it harde to answer this. It is very difficult to define what counts as a builtin and what doesn't, as that quickly devolves into not being able to use Matlab at all (+ is a builtin as well).
You can also use
abs(sin(...)) or abs(cos(...))
with the proper arguments.
James Tursa
2017년 9월 12일
Using the sin function for this would be a sin ...
I had missed this comment ... ;-)
It's one of the rare cases where using a cos would be a sin too ..
0.5-(-1).^((1:n)+(1:n).')/2
or
a = 1 : n ;
a + a.' == 1
채택된 답변
추가 답변 (4개)
Sangam K
2017년 11월 25일
%Hope this helps you.
function a = checkerboard(n)
a = zeros(n);
for i = 1:n
for j = 1:n
if (i == j)
a (i, j) = 0;
elseif (mod(j, 2) == 0) && (mod(i,2) == 0)
a(i,j) = 0;
elseif (mod(j, 2) == 0) || (mod(i,2) == 0)
a(i,j) = 1;
end
end
end
end
Jan Siegmund
2020년 5월 21일
For an even sized checkerboard:
rows = 6;
cols = 4;
normal = repmat(eye(2,'logical'),[rows/2 cols/2]);
% or
inverted = repmat(~eye(2,'logical'),[rows/2 cols/2]);
Mendi
2020년 9월 5일
It is more natural to use modulus on meshgrid:
[iX,iY] = meshgrid(1:8,1:8);
Mask=mod(iX+iY,2);
댓글 수: 2
Bruno Luong
2020년 9월 5일
One liner variant
mod((1:8)+(1:8)',2)
Mendi
2020년 9월 6일
Yeap. The one liner is better.
Bruno Luong
2020년 9월 5일
편집: Bruno Luong
2020년 9월 5일
Two more methods
toeplitz(mod(0:7,2))
or for even size
kron(ones(4),[0 1;1 0])
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!