1.问题描述
将matlab中的矩阵数据存入csv文件的时候难免会遇到小数点后面的数值丢失的问题,通常的说就是精度丢失或者缺损。就拿今天遇到的问题来说吧!
我有一个RNA和disease的嵌入矩阵,将之存入csv文件。
下面展示一些 代码片
。
//利用csvwrite()写入csv文件
csvwrite('dis_vectors.csv',dis_vectors)
存入的csv文件数据如下:
这里很明显的产生了数据的丢失,也说明用csvwrite()存入数据时会产生数据的保存小数点后面位数的舍入现象。特别是在一些要求精度计算的实验时,精度损失是很影响实验结果的。
2.解决办法
定义一个writematrix()函数进行逐行写入文件。
下面展示一些 代码片
。
// writematrix()
% writeMatrix.m
function writeMatrix(A, path)
[row, col] = size(A);
fid = fopen(path, 'w');
for i=1:row
for j=1:col-1
fprintf(fid, '%f\t', A(i,j));
end
fprintf(fid, '%f\r\n', A(i,col));
end
fclose(fid);
end
//调用该函数
writematrix(dis_vectors,'dis_vectors.csv')
结果如下:
所以,我们在matlab中将矩阵数据存入csv文件时最好用逐行写入文件的方式来保存数据。