gpt4 book ai didi

python - Python 中的二维数组搜索

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:17 24 4
gpt4 key购买 nike

我希望能够通过 Python 检索给定两个或多个参数的大型数据集(9M 行,1.4 GB)中的具体行。

例如,从此数据集中:

ID1 2   10  2   2   1   2   2   2   2   2   1

ID2 10 12 2 2 2 2 2 2 2 1 2

ID3 2 22 0 1 0 0 0 0 0 1 2

ID4 14 45 0 0 0 0 1 0 0 1 1

ID5 2 8 1 1 1 1 1 1 1 1 2

给定示例参数:

  • 第二列必须等于 2,并且
  • 第三列必须在范围从 4 到 15

我应该获得:

ID1 2   10  2   2   1   2   2   2   2   2   1

ID5 2 8 1 1 1 1 1 1 1 1 2

问题是我不知道如何在 Python 中的二维数组上有效地执行这些操作。

这是我尝试过的:

line_list = []

# Loading of the whole file in memory
for line in file:
line_list.append(line)

# set conditions
i = 2
start_range = 4
end_range = 15

# Iteration through the loaded list and split for each column
for index in data_list:
data = index.strip().split()
# now test if the current line matches with conditions
if(data[1] == i and data[2] >= start_range and data[2] <= end_range):
print str(data)

我想多次执行此过程,但即使数据文件已加载到内存中,我的执行方式也非常慢。

我正在考虑使用 numpy 数组,但我不知道如何在给定条件下检索行。

感谢您的帮助!

更新:

根据建议,我使用了关系数据库系统。我选择 Sqlite3,因为它非常易于使用且部署快速。

我的文件通过 sqlite3 中的导入功能加载大约需要 4 分钟。

我在第二列和第三列上建立了索引,以加快检索信息的过程。

查询是通过Python完成的,使用模块“sqlite3”。

这真是太快了!

最佳答案

我几乎会选择你所拥有的(未经测试的):

with open('somefile') as fin:
rows = (line.split() for line in fin)
take = (row for row in rows if int(row[1] == 2) and 4 <= int(row[2]) <= 15)
# data = list(take)
for row in take:
pass # do something

关于python - Python 中的二维数组搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14637996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com