无法将 2D 和 3D 矩阵保存到文件中

Cannot save 2D and 3D matrices to a file

我无法使用 Octave 将矩阵保存到文件中。这是发生的事情:

A = [1 2 3; 4 5 6; 7 8 9]
dlmwrite("test.data", A)

输出:

A =

   1   2   3
   4   5   6
   7   8   9

没有创建文件。

正在尝试保存 3D 矩阵:

A = [1 2 3; 4 5 6; 7 8 9]
A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
dlmwrite("test.data", A)

输出:

A =

   1   2   3
   4   5   6
   7   8   9

A =

ans(:,:,1) =

   1   2   3
   4   5   6
   7   8   9

ans(:,:,2) =

   10   11   12
   13   14   15
   16   17   18

error: transpose not defined for N-D objects
error: called from
    dlmwrite at line 202 column 7
    test_3d at line 31 column 1

没有创建文件。

所以,我的问题是:

八度版本:6.3.0

我 运行 在我的机器上进行了测试,天哪,Octave 5.1.0 出现了类似的错误:

在我的例子中,我得到了错误:

error: transpose not defined for N-D objects
error: called from
    dlmwrite at line 195 column 7

在 dlmwrite.m (Octave\Octave-5.1.0.0\mingw64\share\octave.1.0\m\io\dlmwrite.m).script 中我发现:

他们基本上是在尝试运行处理传入的数组。 t运行spose 运算符是为二维数组定义的,但不是为三维数组定义的,这就是返回错误的原因。

我运行在MATLAB R2020a中进行了同样的测试,没有产生任何错误,并输出了一个文件(test.data),内容如下:

1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18

无论哪种情况,文档都没有明确提到数组的维度不能超过二维,但看起来 Matlab 函数是为支持二维以上而编写的,而 Octave 等价物则不支持。

关于问题:

为什么两种情况都没有生成文件?

由于 Octave 使用脚本来实现 dlmwrite,因此无论何时发现错误,脚本的其余部分都不会被解析。因此,没有创建文件

关于t运行spose的错误信息是什么意思,我没有执行这样的操作?

报错提示Octave试图t运行spose(翻转)一个多维数组,t运行spose运算符不支持(').

这只发生在 Octave 上,还是在 MATLAB 上也发生?

这不会发生在 MATLAB R2020a 中。看起来他们已经在这个函数中内置了对多维数组的支持。

创建一个 Octave 错误 (https://www.gnu.org/software/octave/bugs) 可能是个好主意。 dlmwrite 函数应该更新为支持二维以上,或者该函数的文档 (help dlmwrite) 应该明确声明输入参数 M 的维度不能超过二维。