无法将 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
没有创建文件。
所以,我的问题是:
- 为什么两种情况都没有生成文件?
- 当我没有执行此类操作时,有关转置的错误消息是什么意思?
- 这只发生在 Octave 上,还是在 MATLAB 上也发生?
八度版本: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
的维度不能超过二维。
我无法使用 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
没有创建文件。
所以,我的问题是:
- 为什么两种情况都没有生成文件?
- 当我没有执行此类操作时,有关转置的错误消息是什么意思?
- 这只发生在 Octave 上,还是在 MATLAB 上也发生?
八度版本: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
的维度不能超过二维。