python - 构建一个独特的数据库并计算出现次数

时间:2016-08-30 08:39:56

标签: python arrays performance numpy unique

我正在阅读一个大文件,其中每行有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

我创建了这个帮助功能: 检查new_row是否唯一 - 即rowDB中不存在。 返回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函数来检查一行是否是唯一的,如果没有得到行索引?你会如何建立这个数据库?感谢!!!

2 个答案:

答案 0 :(得分:0)

你可以使用Counterofficial documentation上有一些很好的例子。

答案 1 :(得分:0)

您可以使用tuple保存每个行数据,并使用OrderedDict构建rowDB,将行元组映射到行号,然后is_uniq简单快捷检查为:

return new_row not in rowDB

is_uniq将是:

def is_uniq(rowDB, new_row):
    if new_row in rowDB:
         return False, rowDB[new_row]
    else:
         return True, 0