MATLAB - 在矩阵的第一列添加值

时间:2012-04-10 10:37:03

标签: matlab matrix

我想在矩阵的开头添加一个值,例如,我的矩阵是

0,0,0,0,0,0
0,1,1,1,0,0
1,0,0,1,0,0
1,1,1,0,0,0

然后我想在第一列添加'1'或'0'因此它会变成这样

1,0,0,0,0,0,0
1,0,1,1,1,0,0
1,1,0,0,1,0,0
1,1,1,1,0,0,0

0,0,0,0,0,0,0
0,0,1,1,1,0,0
0,1,0,0,1,0,0
0,1,1,1,0,0,0

我怎么能在MATLAB中做到这一点?

3 个答案:

答案 0 :(得分:5)

您可以连接矩阵而无需像这样从头开始创建另一个矩阵:

% your matrix
A = [ 0,0,0,0,0,0;
      0,1,1,1,0,0;
      1,0,0,1,0,0;
      1,1,1,0,0,0 ];

A_with_zeros = [zeros(size(A,1),1) A]
A_with_ones = [ones(size(A,1),1) A]

% Output:
%  A_with_zeros = [ 0 0 0 0 0 0 0
%                   0 0 1 1 1 0 0
%                   0 1 0 0 1 0 0 
%                   0 1 1 1 0 0 0 ]
% 
%  A_with_ones = [ 1 0 0 0 0 0 0 0
%                  1 0 0 1 1 1 0 0
%                  1 0 1 0 0 1 0 0
%                  1 0 1 1 1 0 0 0 ]

关于连接矩阵的文档

  • horzcat
  • vertcat

    这两个文档页面详细描述了现有方法,这些方法可以让您水平连接数组(我在上面的例子中做了什么)和垂直连接数组(如果你想在矩阵中添加行)。

  • 答案 1 :(得分:2)

    使用数组连接语法 - [a b]将矩阵水平粘合在一起,[a; b]将它们垂直粘合在一起。

    像这样:

    >> a = ones(3,1)
    
    a =
    
         1
         1
         1
    
    >> b = magic(3)
    
    b =
    
         8     1     6
         3     5     7
         4     9     2
    
    >> c = [a b]
    
    c =
    
         1     8     1     6
         1     3     5     7
         1     4     9     2
    

    垂直:

    >> d = ones(1,3)
    
    d =
    
         1     1     1
    
    >> e = [d; b]
    
    e =
    
         1     1     1
         8     1     6
         3     5     7
         4     9     2
    

    如果尺寸不匹配,MATLAB会给您一个错误。不要这样做:

    >> f = ones(1,10)
    
    f =
    
         1     1     1     1     1     1     1     1     1     1
    
    >> g = magic(3)
    
    g =
    
         8     1     6
         3     5     7
         4     9     2
    
    >> [f; g]
    ??? Error using ==> vertcat
    CAT arguments dimensions are not consistent.
    

    答案 2 :(得分:0)

    创建一个带有额外列的新矩阵,复制旧矩阵,然后将新列的数据放入at(:,1)。

    output = zeros(size(input, 1), size(input, 2) + 1);
    output(:, 2:end) = input;
    output(:, 1) = new_column;
    

    或者如果你想要获得两个基质,一个列为1,一个列为0:

    output0 = zeros(size(input, 1), size(input, 2) + 1);
    output0(:, 2:end) = input;
    output1 = ones(size(input, 1), size(input, 2) + 1);
    output1(:, 2:end) = input;