提高使用Python进行比较分析的速度

提高使用Python进行比较分析的速度,python,performance,numpy,Python,Performance,Numpy,我考虑这个问题已经有一段时间了,我希望这里的人能提出一个建议,大大提高使用Python进行分析的速度 我基本上有两个文件。文件(1)包含由字母、起点和终点组成的坐标:例如“a 1000 1100”,文件(2)包含由字母和坐标组成的每个数据点的数据集:例如“p 1350”。我试图使用脚本计算坐标边界内的数据点数量,但前提是文件(2)中的数据点字母和文件(1)中的坐标相等。在实际数据集中,文件(1)包含>50K个坐标,文件(2)包含>5000万个数据点。增加数据点的数量会以指数方式增加脚本运行所需的

我考虑这个问题已经有一段时间了,我希望这里的人能提出一个建议,大大提高使用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