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