【发布时间】:2014-04-15 20:30:53
【问题描述】:
我正在读取一个大约 80MB 的 csv 文件 - data_O3。它的大小约为 250,000 x 5。我创建了E,它有点大,因为它有所有的日子(data_O3 缺少一些日子)。我想比较两者,如果日期(保存在变量d3)和站点ID(d4)相同,则数据点(第5列)放在E中。
for j = 1:size(data_O3,1)
E(strcmp(d3,data_O3{j,3})&d4 == data_O3{j,4},5) = data_O3(j,5);
end
此脚本运行良好,但由于某种原因,运行它所需的时间比预期的要长。我已经为其他数据运行了相同的代码,这些数据只是稍微小一点,没有问题。这是strcmp 代码的问题还是其他问题?
使用的脚本和文件可以在这里找到:https://www.dropbox.com/sh/7bzq3m1ixfeuhu6/i4oOvxHPkn
【问题讨论】:
-
strcmp返回逻辑0或1,因此它写入E(0,5)或E(1,5)... 并且“0”不是有效索引。我认为这段代码没有你想象的那么“有效”。 -
您可以在
strcmp中传播&d4以节省一点? -
@BenVoigt 它不能通过二进制索引工作吗?
-
@BenVoigt
E(false,5)没什么问题,它只是返回一个空矩阵。有趣的是,您可以将它用作左值,它在赋值中什么也不做。很奇怪吧? -
我没有意识到您可以混合使用逻辑索引和数字索引,但我刚刚找到了一个说明您可以的参考。