我想创建一个具有以下内容的矩阵:
我想获得与下面的代码相同的结果,但是在一行(命令窗口)表达式中:
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
你能坐三行吗?
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]);
一种简单的方法是使用加法的隐式展开,请注意
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?