矩阵,当行和列均为奇数或偶数时为1

问题描述 投票:0回答:2

我想创建一个具有以下内容的矩阵:

  • 如果行是奇数而列是奇数,则值为1
  • 如果行是偶数而列是偶数,则值为1
  • 否则为0。

我想获得与下面的代码相同的结果,但是在一行(命令窗口)表达式中:

 N=8;
 A = zeros(N);

 for row = 1:1:length(A)
     for column = 1:1:length(A)
        if(mod(row,2) == 1 && mod(column,2) == 1)

             A(row,column*(mod(column,2) == 1)) = 1;

         elseif(mod(row,2)== 0 && mod(column,2) == 0 )

             A(row,column*(mod(column,2) == 0)) = 1;

        end
     end
  end
 disp(A)

这是预期的结果:

 1     0     1     0     1     0     1     0
 0     1     0     1     0     1     0     1
 1     0     1     0     1     0     1     0
 0     1     0     1     0     1     0     1
 1     0     1     0     1     0     1     0
 0     1     0     1     0     1     0     1
 1     0     1     0     1     0     1     0
 0     1     0     1     0     1     0     1
matlab matrix
2个回答
0
投票

你能坐三行吗?

N=8;
A = zeros(N);
A(1:2:end, 1:2:end) = 1;
A(2:2:end, 2:2:end) = 1;

单行解法(N为偶数时:

A = repmat([1, 0; 0 1], [N/2, N/2]);

0
投票

一种简单的方法是使用加法的隐式展开,请注意

odd+odd = even+even = 0

所以这是您的答案:

A = 1 - mod( (1:N) + (1:N).', 2 );

您也可以使用teoplitz执行此操作,如此MATLAB Answers Post所示

对于行数=列数= N的方阵>

A = toeplitz(mod(1:N,2));

如果行数(M)不等于列数(N),则

A = toeplitz(mod(1:M,2),mod(1:N,2))

FWIW,您正在询问此问题的特定情况:

How to generate a customized checker board matrix as fast as possible?


推荐问答