我有一个列表,只有两百万个元素,每个元素有7个条目。
我对数据运行机器学习算法,并希望将分类结果附加到每个元素的末尾。
我使用.append()
功能,例如
for j in range(len(data)):
data[j].append(results[j])
但是,这需要花费很多时间(8小时以上,但仍未终止)。
我想知道是否有更有效的方法来做到这一点。数据是从CSV文件读入的,所以我可以将结果直接写入CSV吗?
我正在考虑使用numpy数组,但我记得有人说列表更快。
有人有什么想法吗?
编辑:这是我的代码
import csv
with open("measles_data_b", 'r') as f:
reader = csv.reader(f)
t = list(reader)
### Perform the machine Learning. That bit works fine.
#At this point, t is a list with size=1971203, and each element in t has 7 elements of its own
# results is a list with the same number of elements. Its entries are
# one of three things: '1','2','0'.
for j in range(len(t)):
t[j].append(results[j])
答案 0 :(得分:0)
作为实验,请运行以下代码:
import random
def append_items(lists, items):
for i in range(len(lists)):
lists[i].append(items[i])
rand_lists = [[random.randint(0,9) for i in range(7)] for j in range(2000000)]
rand_list = [random.randint(0,9) for i in range(2000000)]
print("Lists generated")
append_items(rand_lists,rand_list)
print("Lists appended")
当我运行它时,我需要等待20-30秒才能看到“生成的列表”已打印,但下一次打印几乎是即时的。如果你没有得到这种行为,那么你有一个错误的Python安装。如果不是 - 很难说发生了什么。看看type(t[0])
可能有趣的是,你可能有一个类似列表的对象列表,而不是列表列表,你的类似列表的对象实现了一个低效的追加方法(我还没有使用它,但似乎至少可能csv.reader返回某种自定义对象)。