提高使用Python进行比较分析的速度
我考虑这个问题已经有一段时间了,我希望这里的人能提出一个建议,大大提高使用Python进行分析的速度 我基本上有两个文件。文件(1)包含由字母、起点和终点组成的坐标:例如“a 1000 1100”,文件(2)包含由字母和坐标组成的每个数据点的数据集:例如“p 1350”。我试图使用脚本计算坐标边界内的数据点数量,但前提是文件(2)中的数据点字母和文件(1)中的坐标相等。在实际数据集中,文件(1)包含>50K个坐标,文件(2)包含>5000万个数据点。增加数据点的数量会以指数方式增加脚本运行所需的时间。所以我想知道是否有人能想出一个更省时的方法 谢谢 我的脚本从#脚本策略开始,但我首先模拟一个最小的示例数据集:提高使用Python进行比较分析的速度,python,performance,numpy,Python,Performance,Numpy,我考虑这个问题已经有一段时间了,我希望这里的人能提出一个建议,大大提高使用Python进行分析的速度 我基本上有两个文件。文件(1)包含由字母、起点和终点组成的坐标:例如“a 1000 1100”,文件(2)包含由字母和坐标组成的每个数据点的数据集:例如“p 1350”。我试图使用脚本计算坐标边界内的数据点数量,但前提是文件(2)中的数据点字母和文件(1)中的坐标相等。在实际数据集中,文件(1)包含>50K个坐标,文件(2)包含>5000万个数据点。增加数据点的数量会以指数方式增加脚本运行所需的
import numpy as np
import random
import string
# simulate data
c_size = 10
d_size = 1000000
# letters
letters = list(string.ascii_lowercase)
# coordinates
c1 = np.random.randint(low=100000, high=2000000, size=c_size)
c2 = np.random.randint(low=100, high=1000, size=c_size)
# data
data = np.random.randint(low=100000, high=2000000, size=d_size)
# script strategy
# create coordinates and count dict
c_dict = {}
count_dict = {}
for start,end in zip(c1,c2):
end = start + end
c_l = random.choice(letters)
ID = c_l + '_' + str(start) + '_' + str(end)
count_dict[ID] = 0
if c_l not in c_dict:
c_dict[c_l] = [[start,end]]
else:
c_dict[c_l].append([start,end])
# count how many datapoints (x) are within the borders of the coordinates
for i in range(d_size):
d_l = random.choice(letters)
x = data[i]
if d_l in c_dict:
# increasing speed by only comparing data and coordinates with identical letter identifier
for coordinates in c_dict[d_l]:
start = coordinates[0]
end = coordinates[1]
ID = d_l + '_' + str(start) + '_' + str(end)
if x >= start and x <= end:
count_dict[ID] += 1
# print output
for ID in count_dict:
count = count_dict[ID]
print(ID + '\t' + str(count))
将numpy导入为np
随机输入
导入字符串
#模拟数据
c_尺寸=10
d_大小=1000000
#信件
字母=列表(string.ascii_小写)
#坐标
c1=np.random.randint(低=100000,高=2000000,尺寸=c_尺寸)
c2=np.random.randint(低=100,高=1000,大小=c_大小)
#资料
数据=np.random.randint(低=100000,高=2000000,大小=d_大小)
#脚本策略
#创建坐标并计算数字
c_dict={}
count_dict={}
开始时,以拉链结尾(c1、c2):
结束=开始+结束
c_l=随机选择(字母)
ID=c_l+''''''+str(开始)+''''+str(结束)
计数dict[ID]=0
如果c_l不在c_dict中:
c_dict[c_l]=[[开始,结束]]
其他:
c_dict[c_l]。追加([start,end])
#计算坐标边界内的数据点(x)数量
对于范围内的i(d_尺寸):
d_l=随机选择(字母)
x=数据[i]
如果d_l在c_dict中:
#仅通过比较具有相同字母标识符的数据和坐标来提高速度
对于c_dict[d_l]中的坐标:
开始=坐标[0]
结束=坐标[1]
ID=d_l+''''''+str(开始)+'''+str(结束)
如果x>=开始和x