How to create a checkerboard matrix without inbuilt function.
Mostrar comentarios más antiguos
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 comentarios
Riley Smith
el 12 de Sept. de 2017
Stephen23
el 12 de Sept. de 2017
@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
el 12 de Sept. de 2017
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
el 12 de Sept. de 2017
If you get stuck, or just want to see how others have done this:
Rik
el 12 de Sept. de 2017
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
el 12 de Sept. de 2017
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
Respuesta aceptada
Más respuestas (4)
Sangam K
el 25 de Nov. de 2017
%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
1 comentario
Nitika Gupta
el 2 de Jun. de 2019
thanks
Jan Siegmund
el 21 de Mayo de 2020
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
el 5 de Sept. de 2020
It is more natural to use modulus on meshgrid:
[iX,iY] = meshgrid(1:8,1:8);
Mask=mod(iX+iY,2);
2 comentarios
Bruno Luong
el 5 de Sept. de 2020
One liner variant
mod((1:8)+(1:8)',2)
Mendi
el 6 de Sept. de 2020
Yeap. The one liner is better.
Bruno Luong
el 5 de Sept. de 2020
Editada: Bruno Luong
el 5 de Sept. de 2020
Two more methods
toeplitz(mod(0:7,2))
or for even size
kron(ones(4),[0 1;1 0])
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!