【问题标题】:Matlab - Splitting a column into two (efficiently)Matlab - 将一列分成两列(有效)
【发布时间】:2015-01-06 19:33:41
【问题描述】:

我之前写过一些代码将 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 个字符放入他们自己的列中,其余字符也是如此。

【问题讨论】:

  • 您正在编辑 csv/txt 文件吗?如果是这样,请使用Notepad++。将光标放在“1001 365”之后的第一行,然后选择编辑->列编辑器->文本插入以插入一个空白列。
  • 一般来说,将数字更改为字符串会大大降低速度。
  • Thomas 不错的建议,但由于某种原因,列停止在第 100 万行左右分散。

标签: matlab matrix


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以使用模数

    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 它应该适用于向量(即您的第二列)

    【讨论】:

    • 嗯,在我看来,您正在加载一个很长的数字,并且您想将其拆分为 4 列较小的数字。这可以使用模数(只需将 100 更改为 10000 等)并重命名它们中的每一个来完成。我不确定您的输入数据是什么样的。模数是将整数数据拆分成更小部分的最有效方法。
    • 我已经实现了该功能,但是计算机正在努力实现代码。 T=importdata('File1.txt'); A= T(:,[1]); BA=T(:,[2]); BB= T(:,[2]); B = (BA-mod(BA,100))/100; C = mod(BA,100); D= T(:,[3]);组合 = [A,B,C,D]; dlmwrite('1',组合);想法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多