我正在尝试导入.csv
文件以处理MATLAB中的数据,但我遇到了一些麻烦。
该文件包含一个具有相关编号的列,第二列包含一个浮点数(十进制数字用逗号分隔)。
当我用csvread()
读取文件时,我获得了一个包含3列的数组(一列带有相关数字,另一列带有浮点数的整数,另一列带有浮点数的小数部分) )。
我想要做的下一步是在它们之间使用,
连接该数组的第二和第三列,这样我就可以组合原始的浮点数。
有没有办法做到这一点?或者更好的方法来导入那种数据?
这是原始csv文件的示例:
1,1,143526
2,1,143524
3,1,143472
4,1,143413
5,1,143472
6,1,143485
7,1,143556
8,1,143552
9,1,143644
10,1,143559
我需要的是一个数组:
[1 2 3 4 5 6 7 8 9 10]
还有另外一个:
[1.143526 1.143524 1.143472 1.143413 1.143472 1.143485 ...
1.143556 1.143552 1.143644 1.143559]
答案 0 :(得分:0)
如果十进制数是具有固定格式(等小数位)的数字,则可以调整新矩阵
d = 4 %% decimal places
n = lenght(M) %% M from cvsread
for i= 1:n
A(i, 1) = M(i, 1)
A(i, 2) = M(i, 2) + M(i, 3) / 10^d
end
答案 1 :(得分:0)
您遇到的问题是,使用逗号,
作为十进制数字的分隔符,MATLAB(或更好:csvread
)假定您有3行:
1 , 1 , 143526
而不是两行,其中第二行是浮点数,根据需要:
1 1.143526
通过将逗号后面的部分划分为0.143526
,可以轻松地组合向量。你可以找到你必须除以的数字
10.^(ceil(log10(x)))
对于143526
,这会给10^6
,因此除以此项会根据需要提供0.143526
。
现在我们只需要添加第二列中的整数部分。
假设您将CSV文件读取到名为X
的矩阵,您可以通过
corrNumber = X(:,1);
floatNr = X(:,2) + X(:,3) ./ 10.^(ceil(log10(X(:,3))));
如评论中所述,1.0998
等数字会导致此方法出现问题。解决此问题的唯一方法,无需从csvread
更改为如果小数位数是固定的,则fscanf
。然后我们可以通过插入max
:
floatNr = X(:,2) + X(:,3) ./ 10.^(ceil(max(log10(X(:,3)))));