矩阵连接或合并

时间:2017-11-22 16:19:32

标签: c algorithm matrix concatenation

new output from edited data在我的项目中,我有一个11X24的矩阵,但是我需要将它转换/合并/连接到35X11的矩阵表示35行和24列。

我需要的是添加24行,然后添加另一个矩阵的11行,就像在Matlab中的水平串联一样。

计算第一个矩阵的方式由下面的代码给出,它是由双复数定义的复杂矩阵

//take real and imaginary part to build e_m matrix
re = fopen("realpart.txt","r");
for(i=0;i<ROWS;i++){
    for(j=0;j<COLS;j++){
        fscanf(re,"%lf",&real[i][j]);
    }
}

fclose(re);
im = fopen("imagepart.txt","r");
for(i=0;i<ROWS;i++){
    for(j=0;j<COLS;j++){
        fscanf(im,"%lf",&imag[i][j]);
    }
}

fclose(im);

//compute e_m matrix
for(i=0;i<ROWS;i++){
    for(j=0;j<COLS;j++){
        e_m[i+ROWS*j].r = real[i][j];
        e_m[i+ROWS*j].i = imag[i][j]; //defined cols-by-cols (i.e. z[0][1] is z[35])
    }
}

两个.txt文件正在读取文件,并且输出的是附加到此帖子的e_m.txt文件。要连接它我使用以下代码:

for(d=0;d<ord1;d++){
    for(j=0;j<COLS;j++){
        if(d>23){
            e_mm[d+ord1*j].r = real[i][j];
            e_mm[d+ord1*j].i = imag[i][j]; //defined cols-by-cols (i.e. z[0][1] is z[35]
        }
        else
            e_mm[d+ord1*j].r= 0;
        e_mm[d+ord1*j].i= 0;
    }
}

FILE* file7=fopen("/dev/conc.txt","w");
for(i=0;i<ord1;i++){
    for(j=0;j<COLS;j++){
        fprintf(file7,"%lf\t %lf\t", e_mm[i+ord1*j].r,e_mm[i+ord1*j].i);
    }
    fprintf(file7,"\n");
}
fclose(file7);
for(i=0;i<ord1;i++){
    for(j=0;j<COLS;j++)
    if (i>23) {
        concat[i].r=e_m[i].r;
        concat[j].i=e_m[j].i;
    }
    else
        concat[i].r = 0;
    concat[j].i = 0;
}
FILE* file8=fopen("/dev/concat.txt","w");

for(i=0;i<ord1;i++){
    for(j=0;j<COLS;j++){
        fprintf(file8,"%lf\t %lf\t", concat[i].r, concat[j].i);
    }
    fprintf(file8,"\n");
}

fclose(file8);
*/

但输出不是我需要的。有人可以指导我做错了吗? e_m image 11x24 matrix

某些可靠的声明在这里..因为代码是一个长度,这就是为什么我包含了整个代码。

doublereal  real[ROWS][COLS];                //real coefficient to build E_m matrix
  doublereal  imag[ROWS][COLS];                //imaginary coefficient to build E_m matrix
  doublereal  real1[ROWS][COLS];                //real coefficient to build E_m matrix by me
  doublereal  imag1[ROWS][COLS];  
  doublecomplex e_m[ROWS*COLS]; 
  ROWS = 11;
  integer COLS = 24;        
  integer ldvt=COLS;    
  integer ord1 = 35;doublecomplex e_m[ROWS*COLS];              
  doublecomplex e_mm[ord1*COLS];
  doublecomplex e_m1[ord1*COLS]; 

编辑的代码行

 //take real and imaginary part to build e_m1 matrix
            re1 = fopen("realpart.txt","r");
             for(d=23;d<ord1;d++){
             for(j=0;j<COLS;j++){
              fscanf(re1,"%lf",&real1[d][j]);
               }
              }
              fclose(re1);

            im1 = fopen("imagepart.txt","r");
              for(d=23;d<ord1;d++){
              for(j=0;j<COLS;j++){
                fscanf(im1,"%lf",&imag1[d][j]);
              }
             }
            fclose(im1);

                            for(d=0;d<ord1;d++){
                            for(j=0;j<COLS;j++){
                                if(d<24)  {
                                      e_m1[d*COLS+j].r =  0;
                                      e_m1[d*COLS+j].i =  0;  //defined cols-by-cols (i.e. z[0][1] is z[35])
                                                }
                                                    else   {

                                                            e_m1[d*COLS+j].r =  real1[d][j];
                                                            e_m1[d*COLS+j].i =  imag1[d][j];
                                                           }
                                                }
                           }


            FILE* file5=fopen("/dev/e_m1.txt","w");
                    for(d=0;d<ord1;d++){
                       for(j=0;j<COLS;j++){
                        fprintf(file5,"%.3f\t %.3f\t",e_m1[d*COLS+j].r,e_m1[d*COLS+j].i);[![enter image description here][4]][4]
                     }
                        fprintf(file5,"\n");
                    }
                   fclose(file5);

0 个答案:

没有答案