2017-05-12 3 views
0

私はサイズ16000 * 16000の対角線で支配的な行列を持っています。私はこの行列の最初のn行とn列を抽出したいと思います(例えば最初の100 * 100セル)抽出された行列はまだそれを行うために、対角dominant.Myの試みになるようである:行列がランダムに生成されるので、オフセットが固定されていないので、これは動作しません特定のオフセットでC++でテキストファイルを読む

#include <stdio.h> 
#include <string.h> 
#include <mpi.h> 
#include <stdlib.h> 

int main() 
{ 

double **Matrix_A; 
FILE *fp; 
int global_size = 100; 
int offset = 0; 

if ((fp = fopen ("matrix_16000.txt", "r")) == NULL) { 
       printf("Can't open input matrix file"); 
       exit(-1); 
      } 

Matrix_A = (double **) malloc(global_size*sizeof(double *)); 
for(int irow = 0; irow < global_size; irow++) 
    { 
    offset = irow * 16000; 
    fseek(fp, offset, SEEK_SET); 
    Matrix_A[irow] = (double *) malloc(global_size * sizeof(double)); 
    for(int icol = 0; icol < global_size; icol++){ 
     fscanf(fp, "%lf", &Matrix_A[irow][icol]); 

     } 

    } 
    fclose(fp); 
    return 0; 
} 

。私のコンパイラがmpiccであることを知っていれば、より良いアイディアです

+0

mpiccのは、コンパイラ、コンパイラの数の1周りのラッパーをイマイチ...これはまた、最小限のコンパイル例 – Vality

+0

をイマイチコードは非常に長いです。これはただでありますエキス。私のコードを実行するとき、私はちょうどデフォルトのオプションでmpiccコマンドを使用します。 – Nawal

+1

@Nawalだから、**製造** [mcve]。私たちが使うことのできる例を作るのに迷惑をかけることさえできないのであれば、私たちはあなたを助けるのに時間を投資すべきですか? –

答えて

1

あなたは実際には非常に近いです。 fseekは動作しません。代わりに、EOLへのスキャン:

int c; 
Matrix_A = (double **) malloc(global_size*sizeof(double *)); 
for(int irow = 0; irow < global_size; irow++) { 
    Matrix_A[irow] = (double *) malloc(global_size * sizeof(double)); 
    for(int icol = 0; icol < global_size; icol++){ 
     fscanf(fp, "%lf", &Matrix_A[irow][icol]); 
    } 
    while ((c = fgetc(fp)) != EOF && c != '\r' && c != '\n') {} 
} 
fclose(fp); 
+1

13と10を '\ r'と '\ n'に置き換えて話すことができますか?意図を解釈するのが簡単です。 – user4581301

+0

これはなぜダウンボトムですか? – Charlie

+0

@Charlie(避けることができる)、malloc()の読み込みはしますが、free()は読み込みません。 – ThingyWotsit

関連する問題