为阵列的每两行更新某个位置的值

时间:2017-02-21 21:24:13

标签: matlab matrix

我有一个带有零的 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]

4 个答案:

答案 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