3

問題は、float の 2D ベクトルをファイルに保存したいということです。面倒になりつつあるC++に慣れていないので、次のような解決方法が考えられます。

  1. それらを文字列にシリアル化し、ファイルに書き込みます。
  2. それらをバイナリ データにシリアル化し、ファイルに書き込みます。

2 つの方法のうち、速度の面でより効率的なのはどれですか?

私は次のようなことをしています:

std::string serialized;

    for (int s = 0; s < (int) mfcc_features_a.size(); s++)
     {

     for (int t = 0; t < (int) mfcc_features_a[s].size(); t++){
       serialized = serialized + "|" + boost::lexical_cast<std::string>(mfcc_features_a[s][t]);
     }
     }

    std::cout << "serialized string is: " << serialized << std::endl;
4

3 に答える 3

3

バイナリ データの保存は、ほぼ確実にデータが小さくなるため、多少高速になる傾向があります。違いは、プログラムの全体的なパフォーマンスにとって重要である場合とそうでない場合があります。調べるには測定する必要があります。

C++03 では、コードに大きな非効率性があります。specialized = specialized + "|" + ...float 値ごとに 3 つのコピーで、完全なデータのコピーを徐々に長く作成します。を使用する+=か、データを直接ストリームに書き込みます。C++ 11では、次のように書くことで解決できますspecialized = std::move(specialized) + "|" + ...

于 2013-04-01T06:12:02.317 に答える
1

バイナリは確かに高速に実行できますが、ほとんどのプログラマーは浮動小数点形式をよく理解していないため、コーディングとデバッグが面倒になる可能性があります。この点で、プログラミングと実行の合計時間は遅くなる可能性があります。

また、他のマシンへのデータの移植性が必要な場合は、ほとんどの場合、普遍的に読み取り可能な形式に変換する価値があります。

于 2013-04-01T06:13:51.613 に答える