1

我想做的很简单。这有效:

save weights.txt weights

但这不会:

filename = "weights.txt"
save filename weights

好吧,它确实保存了矩阵,weights但保存到了一个名为filename... not的文件中weights.txt

我试过了

save("-ascii", filename, "weights");

但这很糟糕,因为矩阵的名称必须是一个字符串。而且这行不通。Octave 说它不能将 NDArray (?) 转换为 Matrix。

为什么?如何让它发挥作用?

4

2 回答 2

0

您可以dlmwrite用于写入分隔的 ASCII 数据:

>> filename = "weights.txt";
>> weights = rand(3,3);
>> dlmwrite(filename, weights)
>> type weights.txt

0.16218,0.52853,0.26297
0.79428,0.16565,0.65408
0.31122,0.60198,0.68921

默认情况下,这是逗号分隔的,但您可以将自己的分隔符作为第三个参数传递。

编辑:

好吧,MATLAB 将允许您使用 保存任何维度的数组dlmwrite,并且您可以使用 读回数据dlmread。但是,正如 carandraug 指出的那样,ASCII 表示最多是 2D 的(MATLAB 会展平额外的维度)。如果您还将导出矩阵的形状保存在某处,您仍然可以恢复此信息:

>> shape = "shape.txt";
>> weights = rand(3,3,3);
>> dlmwrite(filename, weights, 'precision', 17)
>> dlmwrite(shape, size(weights))
>> M = reshape(dlmread(filename), dlmread(shape));
>> all(M(:) == weights(:))
ans =
     1

当然,与仅使用 MATLAB 的原生save weights; load weights.

于 2012-11-11T22:01:45.377 回答
0

那里有2个问题:

  1. 用作save命令并传递变量或函数,但不将变量名称作为字符串传递。没有办法解决这个问题。命令形式的工作方式是将每个参数转换为字符串。当你这样做时,它save weights.txt weights被解释为save ("weights.txt", "weights"),当你这样做时,它与为什么它保存在一个名为 filename.txt 的文件中的原因save filename weights相同。save ("filename", "weights")为什么必须在字符串中传递变量名而不是变量本身?想象一下,您要保存的变量是一个字符串。如何save知道它是否应该保存字符串或命名为字符串的变量?

  2. -ascii使用选项保存 NDArray。你不能这样做,你需要使用另一种格式。如果您希望它位于文本文件中,请使用-text而不是ascii. text 是一种格式,它还保存有关矩阵尺寸的信息,因此可以正确保存和加载任何大小的矩阵。在 ascii 格式中,所有信息都会丢失,因此任何超过 2 维的矩阵都会失败。尝试x = rand (3); save -ascii x_ascii.txt x; save -text x_text.txt x查看文件内部以查看差异。x如果它是 3D 矩阵,你能想出一种保存为 ascii 的方法吗?

于 2012-11-12T12:20:26.167 回答