5

Matlab を使用して、C++ で外部呼び出しを呼び出してから、計算された巨大な行列を受け取ります。マトリックスは非常に巨大で、この C++ プログラムのソース コードにアクセスできません。(持っている場合は、すぐに C++ から保存します)

現在、私のシステムでは、この C++ プログラムは、指定されたデータを計算して Matlab に送り返すのに 1 秒しか使用しません。また、Matlab の dlmwrite は、この単一の巨大な配列をディスクに保存するのに 200 ~ 300 秒かかります。計算する時間がさらに数千あるので、時間を短縮したいと思います。

では、Matlab で保存する最速の方法は何ですか?

4

2 に答える 2

5

可能な最速の方法は、おそらくMatlabのsaveコマンドです。または、マトリックス全体をバイナリファイルにfwriteすることもできます。

を使用dlmwriteすると、値がテキストに変換されます。これには時間がかかり、ディスクに書き込むデータが多くなります。その形式のデータが本当に必要な場合を除いて、これを行わないでください。dlmwriteファイルを段階的に書き込むループではなく、大きなマトリックスを使用して1回呼び出すと、高速になることに注意してください。

于 2013-02-22T13:41:39.717 に答える
2

Matlab のみのソリューションが必要な場合は、おそらくバイナリには fwrite を、ASCII には fprintf を使用します。ただし、IO に関しては、Matlab と Java を組み合わせるのが好きです。これは、通常は高速であるためです。私は次のようなことをします

Java Code
package mypackage.release;

import java.io.DataOutputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException


public class MatrixWriter {
  public static void write(String fileName, double[] matrix) throws IOException {
    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(fileName)));
    for (double d : matrix)
      dos.writeDouble(d);
    dos.close();
  }
}

Matlab Code
import mypackage.release.MatrixWriter;
M = get matrix from c++;
MatrixWriter.write('myfile.dat', M(:));

これは私の頭から離れたものですが、私は常にこれのバリエーションを使用しています。それが役に立てば幸い。

于 2013-02-22T15:56:13.790 に答える