Matlab - 将一列分成两列(高效)

Matlab - Splitting a column into two (efficiently)

我之前写过一些代码将 3 列拆分为 4,但是代码非常低效且耗时。因为我正在处理数百万行,所以它不合适。 (以下是我之前的代码)

tline = fgetl(fid);

ID=tline(1:4);
IDN = str2double(ID);

Day=tline(6:8);
DayN = str2double(Day);

HalfHour=tline(9:10);
HalfHourN = str2double(HalfHour);

Usage=tline(12:end);
UsageN = str2double(Usage);

一定有更高效、更快捷的方法吗?

回到基础,我生成了一个 x x 3 矩阵。但需要一个 x x 4 矩阵

为了展示我正在尝试做的事情,检查一行 - 我正在尝试改变

1001 36501 1005

1001 365 01 1005

如有任何帮助,我们将不胜感激!

编辑:

我试图分成两列的第二列总是由 5 个字符组成。我试图将前 3 个字符放入他们自己的列中,对于其余字符也是如此。

在您的情况下可能需要时间的实际上是使用 str2double 函数。众所周知,当数据集很大时,这个内置函数会变得非常慢。如果可能,您可能会尝试摆脱它。

你可以使用 modulo

ans = (36501 - mod(36501,100))/100 这会给你 365​​

如果你想要 1,它是 mod(36501,100)

所以这会有效地将您的第二列分成 2 个不同的数字,然后您可以重新命名它们等。

嗯,再想想,如果你第二列的所有数字都是 5 位数字,这可能非常有效,因为 mod 在 matlab 中是通过 b = a - m.*floor(a. /m);

检查 http://uk.mathworks.com/help/matlab/ref/mod.html 它应该适用于向量(即你的第二列)