5

我正在使用 Matlab 在 C++ 中调用一些外部调用,然后返回一个巨大的计算矩阵。矩阵非常大,我无法访问这个 C++ 程序的源代码。(如果我有,我会立即从 C++ 中保存)

现在,在我的系统上,这个 C++ 程序只用了 1 秒来计算给定的数据并发送回 Matlab,而 Matlab 的 dlmwrite 需要 200-300 秒才能将这个巨大的数组保存在磁盘上。我还有数千个要计算,我想缩短时间。

那么在Matlab中保存最快的方法是什么?

4

2 回答 2

5

最快的方法可能是 Matlab 的保存命令。或者,您可以整个矩阵写入二进制文件。

使用dlmwrite将值转换为文本,这需要时间并且需要将更多数据写入磁盘。除非您确实需要该格式的数据,否则不要这样做。请注意,dlmwrite如果使用大矩阵而不是在增量写入文件的循环中调用一次会更快。

于 2013-02-22T13:41:39.717 回答
2

如果您想要仅使用 Matlab 的解决方案,我可能会将 fwrite 用于二进制或 fprintf 用于 ASCII。但是,我喜欢在 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 回答