我正在读一个大文件,每行有20个数字。 我希望最终得到一个2D数组,其中每一行都是文件中唯一的一行,此外,对于每一行,我将有它在文件中出现的次数。你知道吗
为此,我构建了rowDB—一个列表列表(其中每个子列表是文件中一个20个数字的行),另一个列表指示它出现的次数:
[uniq, idx] = is_unique(rowDB, new_row)
if (uniq):
rowDB.append(new_row)
num_of_occurances.append(1)
else:
num_of_occurances[idx] += 1
我创建了这个帮助函数: 检查新行是否唯一-即rowDB中不存在。 Return uniq=True/False,如果为False,还返回rowDB中行的索引。你知道吗
def is_unique(rowDB, new_row):
for i in range(len(rowDB)):
row_i = rowDB[i]
equal = 1
for j in range (len(row_i)):
if (row_i[j] != new_row[j]):
equal = 0
break
if (equal):
return [False, i]
return [True, 0]
然而,当数据库是大的,它需要很多时间。所以我的问题是,最有效的方法是什么?也许用numpy数组代替列表? 如果是这样的话,也许有一个内置的numpy函数来检查一行是否唯一,如果不获得行索引?你将如何建立这个数据库?谢谢!!!你知道吗
你也许可以使用Counter,因为official documentation上有一些很好的例子。你知道吗
您可以使用
tuple
保存每行数据,并使用OrderedDict构建rowDB
,它将行元组映射到行号,然后is_uniq
是一个简单而快速的检查,如下所示:is_uniq
将是:相关问题 更多 >
编程相关推荐