7

このようにバイナリファイルからデータを読み取るCで書かれたプログラムを使用する必要があります

nCnt = 0;
for (i=0;i<h.nsph;++i) {
    fread(&gp,sizeof(struct gas_particle),1,fp);
    if (bGas) {
        kd->p[nCnt].iOrder = nCnt;
        for (j=0;j<3;++j) kd->p[nCnt].r[j] = gp.pos[j];
        ++nCnt;
        }

    }

上記のコードは、私が使用しているプログラムのコード全体ではなく、私の質問に関連する部分のみです。nCnt粒子の位置、つまり各粒子の座標を読み取る必要があります。私はPython配列にこれらの位置を持っています、これはこのように見えます

 pos=array([[[ 0.4786236 ,  0.49046784,  0.48877147],
    [ 0.47862025,  0.49042325,  0.48877267],
    [ 0.47862737,  0.49039413,  0.4887735 ],
    ..., 
    [ 0.4785084 ,  0.49032556,  0.48860968],
    [ 0.47849332,  0.49041115,  0.48877266],
    [ 0.47849161,  0.49041022,  0.48877176]]])

Cコードが正しく読み取るように、この配列をバイナリファイルに書き込むにはどうすればよいですか?

4

1 に答える 1

6

Pythonモジュールarrayとそのtofile()メソッドを使用して、Cが読み取れる形式でデータを書き込むか、numpyを使用する場合はIOルーチンを使用します

桁数で、'f'フォーマット(浮動小数点)が機能するはずです。

Cでは、次のように各行を読み取ることができます。

float values[3];
fread( values, sizeof( float ), 3, fh );
于 2013-03-26T11:35:30.863 に答える