Matlab:大数据映射char到Int

时间:2015-05-05 16:08:14

标签: matlab join mapping matlab-table

我有一个包含以下列的matlab表。让我们称之为'参考表': [Security(char),RegionId(int 1,2,3)] 该表的高度约为49,000

我有其他表包含Security(char)和随机数据点作为列。让我们调用这些表的数据表。 这些数据表的总大小为45Gigs。这些表中的每一个都是> 1亿行。 我需要使用引用表来映射regionId并执行以下操作:

[Security(char),RandomDataPoint(float)]> [Security(char),RegionId(int 1,2,3),RandomDataPoint(float)]

通常,对于此操作,我会使用表连接。但是,由于这些表的大小,我对此实现存在实际问题。我的主要问题是内存不足。

一种选择是将表分解为多个部分并加入。但是,我怀疑考虑到45Gigs的汇总数据,这在时间上会非常昂贵。

有没有人对如何解决这个问题有任何建议。如果重要,我需要将region列添加到我的数据表中,这样我就可以将数据写入文本文件并将它们批量加载到sql中。

提前致谢

1 个答案:

答案 0 :(得分:0)

我知道回答你自己的问题很不好,但这就是我最终的结果。

经过大量测试后,我发现这是最快的。 我完全放弃了加入。

maskfor1 = ismember(data.Securities,reference.Securities(reference.RegionId==1))

现在我使用maskfor1减少了我必须针对regionId == 2检查的证券数量。然后我重新创建了maskfor2应该是什么样子。

maskFor2 = zeros(height(data.Securities),1);

minitureMaskFor2 = ismemeber(data.Securities(~masfor1),reference.Securities(reference.RegionId==2))

maskFor2(~maskfor2) = minitureMaskFor2;

其余的是regionId = 3.现在使用掩码为表创建regionId列。

此过程大约需要1分20秒才能运行1亿行。