保存 Matlab 矩阵的最快方法



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

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

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

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

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

如果你想要一个只有 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(:));
这是我头顶

上的事情,但我一直在使用这个的变体。希望对您有所帮助。

最新更新