- ベストアンサー
データの抜き取り、並び替え
初心者です。よろしくお願いします。 今、私は3次元のデータを2次元にするプログラムを作りたいと思っています。データは1列226,981行で並んでいて、行は for(z=0;z<61;z++){ for(y=0;y<61;y++){ for(x=0;x<61;x++){ のように並んでいます。つまり行は61*61*61=226,981行あります。 このデータから例えばx=30のときのyz平面のデータを抜き取りたいと思っています。 データ例: -5.968777e+001 → (0,0,0) -4.980782e+001 → (1,0,0) -5.336652e+001 → (2,0,0) ・ ・ ・ -5.558537e+001 → (30,0,0) →抜き取り ・ ・ -5.595443e+001 → (61,0,0) ・ -5.867385e+001 → (30,1,0) →抜き取り ・ ・ ・ ・ -4.701691e+001 → (30,0,1) →抜き取り ・ ・ のように抜き取りたいと思っています。さらにこの抜き取ったデータを下のように zの変化 →→→→→→→→→→→→→→→→→→→→→→ ↓(30,0,0)(30,0,1)(30,0,2)(30,0,3) ↓(30,1,0)(30,1,1)(30,1,2)(30,1,3) ・・・・ y↓(30,2,0)(30,2,1)(30,2,2)(30,2,3) の↓ ・ 変↓ ・ 化↓ ・ ↓ のように平面に並び替えなければなりません。使う関数や変数など初心者で、まったくわからず困っています。どうか助言やプログラミング例をいただけるとありがたいです。 下はファイルの入出力例から作った入出力プログラムです #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> void Make_Header(char*,int,int); //ヘッダファイル書き出し関数,このまま使用 #define T 226981 main() { /*変数宣言*/ int i; long j; static double data1[1][T]; FILE *fp_i, *fp_o; /*入力*/ printf("data in start\n"); fp_i = fopen("200113-HH-100a-IFFT-RS_ap(dB).dat", "rb"); //ファイルオープン,rbはオープン形式でバイナリファイル読み込み for(j = 0; j < T; j++){ for(i = 0; i < 1; i++){ fread(&data1[i][j],sizeof(static double),1,fp_i); } } fclose(fp_i); //開いたらちゃんと閉じる /*************************************** 処理部分 ***************************************/ /*出力*/ printf("write in start\n"); fp_o = fopen("eee.x00", "wb"); //ファイルオープン,wbはオープン形式でバイナリファイル書き出し for(j = 0; j < T; j++){ for(i = 0; i < 1; i++){ fwrite(&data1[i][j],sizeof(static double),1,fp_o); } } fclose(fp_o); //開いたらちゃんと閉じる Make_Header("eee.x00",1,T); //ErgoVistaのヘッダファイル情報を出力する関数,pixel(横数)とline(縦数)を出入 return 0; } /* ヘッダ情報書きこみのサブルーチン このまま使用*/ void Make_Header(char FN[], int pixel, int line) { char hd[40]="", text[40]; FILE *fhd; strncat(hd, FN, strlen(FN)-3); strcat(hd, "hdr"); if((fhd = fopen(hd, "w")) == NULL){ printf("error : cannot open [%s] (header file)\n", FN); exit(1); } fprintf(fhd, "FILE_TYPE = IMAGE \n"); fprintf(fhd, "IMAGE_LINES = %d \n",line); fprintf(fhd, "LINE_SAMPLES = %d \nEND\n",pixel); fclose(fhd); } このプログラムの処理部分を作りたいと思っています。どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- arain
- ベストアンサー率27% (292/1049)