MatLab:连接数组的2列

时间:2015-04-18 11:06:04

标签: matlab csv

我正在尝试导入.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]

2 个答案:

答案 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)))));