0
我有一个非常大的LIBSVM格式的文件(150GB),其中每一行是像下面这样的大LIBSVM格式的文件:分裂用命令行工具
-1 430018:1 429765:1 428103:1 428954:1 430172:1 427300:1 429485:1 432367:1 427059:1 426870:1 426556:2
(第一个标记是标记,其他是特征:值对)。
我在Python写了一个程序,以此转换成[标号,功能ID的[数组],[值]的数组]如:
[-1,[430018,429765,428103,.. 。],[1,1,1,...]]
但它在Python中运行速度非常慢(我在3小时内只能处理10GB文件)。
有没有一种方法可以获取此文件并将格式更改为[标签,[数组的特征ID],[数组值]]并将其写入另一个文件?
对于参考,这里是Python脚本我写的每一行转换:
def convert(f, line)
l = line.strip().split(" ")
label = int(l[0])
x = [map(int, f.split(":")) for f in l[1:]]
x_idx, x_val = zip(*x)
f.write(str([label, x_idx, x_val])+"\n")
只是为了确认,如果f中的参数只转换一个文件指针? – ChrisProsser
我可以问在这之后会发生什么?我不禁想知道更像是字典的东西,例如每个功能的值或计数可能会更有用? – ChrisProsser
@ChrisProsser实际上在我原来的代码中,我不发送f作为参数,我将x_idx,x_val,label从函数返回并写入main中的文件。为了完整的代码,我只是将f添加到函数参数中。 – user2779485