我有一个带有零的 n-by-m 矩阵,我的行号始终是偶数。对于第一行和第二行,我想将第一个元素更新为1
,将第二个元素更新为第三和第四个元素1
等。
所以如果我的原始矩阵是
[0,0,0
0,0,0
0,0,0
0,0,0
0,0,0
0,0,0]
我希望我的结果矩阵是:
[1,0,0
1,0,0
0,1,0
0,1,0
0,0,1
0,0,1]
答案 0 :(得分:3)
使用索引的另一种解决方案:
m=6;
n=3;
A = zeros(m,n);
A(1:m+2:end)=1;
A(2:m+2:end)=1;
结果:
A =
1 0 0
1 0 0
0 1 0
0 1 0
0 0 1
0 0 1
答案 1 :(得分:2)
您的问题有两种可能的解释。更简单的只是得到第二个矩阵。它是一个对角矩阵,每行重复两次。这可以通过kron
轻松完成:
x = kron(eye(3), [2, 1])
如果要查找导致正确分配1的索引模式,可以使用上面的表达式生成布尔掩码,然后将其应用于任意输入(在您的情况下zeros(6, 3)
):
x = zeros(6, 3);
mask = kron(eye(3, 'logical'), [2, 1]);
x(mask) = 1
答案 2 :(得分:1)
即使2*m
不等于x = zeros(6,4); % example with n=6, m = 4
[n, m] = size(x);
m = min(m,n/2);
x(bsxfun(@plus, 1:n, n*floor(0:.5:m-.5))) = 1;
x =
1 0 0 0
1 0 0 0
0 1 0 0
0 1 0 0
0 0 1 0
0 0 1 0
给出
{{1}}
答案 3 :(得分:0)
sortrows([eye(3);eye(3)],'descend')
ans =
1 0 0
1 0 0
0 1 0
0 1 0
0 0 1
0 0 1
或者,如果您已经有了矩阵:
A = zeros(6,3);
a = 1; % Or whatever arbitrary number.
jj=1;
for ii = 1:2:size(A,1)
A(ii:ii+1,jj)=[a;a];
jj=jj+1;
end