我正在使用Matlab进行一些数据分析并使用txt文件。我有一些保存在文本文件中的矩阵数据,例如:
1.0,1.1,1.2,1.3
1.4,1.5,1.6,1.7
1.8,1.9,2.0,2.1
3.3,3.0,4.0,5.0
我正在使用csvread / dlmread将数据作为矩阵读入Matlab。然后我使用csvwrite / dlmwrite将数据写入单独的txt文件作为逗号分隔值。
问题是当我将矩阵写入另一个文件时,如果值的最后一位为零,则会被消除。我在新文件中获得了以下数据,而不是原始矩阵。
1,1.1,1.2,1.3
1.4,1.5,1.6,1.7
1.8,1.9,2,2.1
3.3,3,4,5
我有点失去精确度。有没有办法告诉Matlab保留与原始数据完全相同的数据?
答案 0 :(得分:2)
这很简单。 dlmwrite
有一个'precision'
标志,可用于指定输出文件所需的精度位数。如果我们假设您的数据只包含一位数的精度,那么您可以执行以下操作,假设您的矩阵存储在M
中,并且您的值与我们在您的示例数据中看到的完全相同,并且您想要写入名为output.txt
的文件:
dlmwrite('output.txt', M, 'precision', '%.1f');
这将使用一位精度打印出每个数字。格式说明符%.1f
表示将数字的浮点表示打印为单个精度数字。如果省略.1
而只是%f
,则默认值为5位精度。
作为一个可重现的示例,我已将您的数据放入名为testdata.txt
的文件中,然后像我之前使用dlmwrite
重新保存它:
>> in = dlmread('testdata.txt');
>> in
in =
1.0000 1.1000 1.2000 1.3000
1.4000 1.5000 1.6000 1.7000
1.8000 1.9000 2.0000 2.1000
3.3000 3.0000 4.0000 5.0000
>> dlmwrite('output.txt', in, 'precision', '%.1f');
...这就是我在文件中输出的内容:
1.0,1.1,1.2,1.3
1.4,1.5,1.6,1.7
1.8,1.9,2.0,2.1
3.3,3.0,4.0,5.0
FWIW,你并没有“失去任何精确度”。 3
和3.0
几乎是相同的数字......你更关心的是格式偏好,而不是精确。如果你重新读取那个将整数的小数位截断回MATLAB的输出文件,你会看到它仍在解释那些将尾随零截断为有效浮点数的数字......即3 --> 3.0
。