2

同じ行列を C で連結しようとしていますが、頭に浮かんだ唯一のアイデアは足し算ですが、うまくいきません。たとえば、 がある場合{1,1;2,2}、新しい行列は になります{1,1,1,1;2,2,2,2}。行数を2倍にしたい。私はグーグルで検索しましたが、何も見つかりませんでした。

これが私のコードです:

 matrix2=realloc(matrix1,sizeof(int*)*(row));
 int i,j;
 for(i=0;i<row;i++){
   for(j=0;j<col;j++){    
    matrix2[i][j]=matrix1[i][j]+matrix1[i][j];
   }
 }
4

3 に答える 3

2

以下に示す疑似コードを使用します。int matrix[2*W][H]C99 より前の C では、 (W と H が#defines でない場合)で配列をインスタンス化できないことに注意してください。

Given matrix1 and matrix 2 of equal W,H
make matrix3 of 2*W,H
for h to H
    for i to W
        matrix3[h][i] = matrix1[h][i]
        matrix3[h][i+W] = matrix2[h][i]

行列を作成するには、行ごとに 1 つの malloc と、行ポインタの配列を格納するための 1 つの malloc が必要です。

以前の割り当てではなく、ループで 2 つの割り当てが必要になることに注意してください。これは、2 か所で設定しているためです。

于 2013-03-04T17:17:43.110 に答える
1

ここでは、入力行列を新しい行列に2回コピーしています。

for(int i = 0; i <m; i ++){for(int j = 0; j <n; j ++){mat2 [i] [j] = mat [i] [j];}}

for(int i = 0; i <m; i ++){for(int j = n; j <(2 * n); j ++){mat2 [i] [j] = mat [i] [jn];}}

于 2013-03-04T17:37:35.700 に答える
1

あなたは、matlab のような高水準言語のバックグラウンドを持っているように聞こえます。C では、プラス演算子は行列を連結しません。これにより、マトリックスに値が追加され、新しい値が新しいマトリックスに格納されます。

于 2013-03-04T17:19:02.510 に答える