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 它应该适用于向量(即你的第二列)
我之前写过一些代码将 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 它应该适用于向量(即你的第二列)