0

たとえば、マトリックスの先頭に1つの値を追加したいのですが、私のマトリックスは

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 でそれを行うにはどうすればよいですか?

4

3 に答える 3

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 ]

行列の連結に関するドキュメント:

  • ホルツキャット
  • バートキャット

    これら 2 つのドキュメント ページでは、配列を水平方向 (上記の例で行ったこと) および垂直方向 (行列に行を追加する場合) に連結できる既存のメソッドについて詳しく説明しています。

  • 于 2012-04-10T10:46:22.653 に答える
    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.
    
    于 2012-04-10T10:48:26.517 に答える
    0

    追加の列を含む新しいマトリックスを作成し、古いマトリックスをコピーしてから、新しい列のデータを (:, 1) に配置します。

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

    または、1 列と 0 列の 2 つの行列を取得する場合は、次のようにします。

    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;
    
    于 2012-04-10T10:39:02.470 に答える