【发布时间】:2019-09-23 15:25:13
【问题描述】:
我有一个作为复数矩阵的 FFT 输出,我在网上找到的所有关于将矩阵保存为文件以供以后使用的结果都包括一些临时循环,并讨论了如何忽略虚部.
不知道有没有更简单的方法。
作为一个玩具示例:
M = rand(3,3) + 1i * rand(3,3)
M =
(0.159968,0.713216) (0.143438,0.379509) (0.636987,0.561565)
(0.386119,0.723281) (0.720302,0.353988) (0.87171,0.445676)
(0.536274,0.399646) (0.149597,0.574987) (0.358984,0.110503)
here中的答案:
M = rand(3,3) + 1i * rand(3,3)
dlmwrite('M.txt', M)
未能保留列和行。
【问题讨论】:
-
这完全取决于“稍后使用”的含义。如果您只是要将它们加载回 MATLAB,为什么不能直接
save('test.mat', 'M')? -
@Wolfie 好点。我想让文件尽可能独立于软件。所以我猜
.txt是一个不错的选择。例如,我希望在任何计算机上单击该文件时立即显示该文件。 -
@Wolfie 不幸的是,我的回答似乎没有保留分隔、列或行...
-
将数据保存在 .txt 文件中是个糟糕的主意。您会失去精度,速度要慢得多,并且数据实际上存储为文本,字符串,而不是数字本身。另外,我相信如何在二进制文件中保存复数没有标准,所以你应该决定如何表示它们。 [This] answer on MATLAB Answers 建议将实部和虚部分开并将它们保存在两个不同的文件中。还有一个 mex 文件可以做到这一点。如果你真的打算把它保存为txt,你应该可以相应地更改代码
-
您确实需要决定如何读取数据。对于精度问题、缺乏压缩、缺乏标准化等问题,能够“立即显示”是一个相当糟糕的权衡,这些问题会因不使用本机文件格式而丢失。如果您不想拥有复杂的 MATLAB 变量,您可以使用为数字数据设计的其他格式(HDF5 / MAT / ...)并分别存储实部和复数部分,但您需要明确目标。