gpt4 book ai didi

python - 加速使用列表理解的简单 Python 函数

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:30 25 4
gpt4 key购买 nike

我正在从导入的 CSV 文件 (~500MB) 中提取 4 列,用于拟合 scikit-learn 回归模型。

看起来这个用于提取的函数非常慢。今天刚学python,有什么提速的建议吗?

可以使用多线程/核心吗?我的系统有 4 个内核。

def splitData(jobs):
salaries = [jobs[i]['salaryNormalized'] for i, v in enumerate(jobs)]
descriptions = [jobs[i]['description'] + jobs[i]['normalizedLocation'] + jobs[i]['category'] for i, v in enumerate(jobs)]
titles = [jobs[i]['title'] for i, v in enumerate(jobs)]

return salaries, descriptions, titles

打印类型(工作)

<type 'list'>

打印作业[:1]

[{'category': 'Engineering Jobs', 'salaryRaw': '20000 - 30000/annum 20-30K', 'rawLocation': 'Dorking, Surrey, Surrey', 'description': '工程系统分析师 Dorking Surrey 薪水 ****K 我们的客户位于 Surrey 的 Dorking,正在寻找工程系统分析师 我们的客户提供专业的软件开发 关键词数学建模、风险分析、系统建模、优化、MISER、PIONEEER 工程系统分析师 Dorking Surrey Salary ****K', 'title': 'Engineering Systems Analyst', 'sourceName': 'cv-library.co.uk', 'company': 'Gregory Martin International', 'contractTime': 'permanent' , 'normalizedLocation': 'Dorking', 'contractType': '', 'id': '12612628', 'salaryNormalized': '25000'}]


def loadData(filePath):
reader = csv.reader( open(filePath) )
rows = []

for i, row in enumerate(reader):
categories = ["id", "title", "description", "rawLocation", "normalizedLocation",
"contractType", "contractTime", "company", "category",
"salaryRaw", "salaryNormalized","sourceName"]

# Skip header row
if i != 0:
rows.append( dict(zip(categories, row)) )

return rows



def splitData(jobs):
salaries = []
descriptions = []
titles = []

for i in xrange(len(jobs)):
salaries.append( jobs[i]['salaryNormalized'] )
descriptions.append( jobs[i]['description'] + jobs[i]['normalizedLocation'] + jobs[i]['category'] )
titles.append( jobs[i]['title'] )

return salaries, descriptions, titles



def fit(salaries, descriptions, titles):
#Vectorize
vect = TfidfVectorizer()
vect2 = TfidfVectorizer()
descriptions = vect.fit_transform(descriptions)
titles = vect2.fit_transform(titles)

#Fit
X = hstack((descriptions, titles))
y = [ np.log(float(salaries[i])) for i, v in enumerate(salaries) ]

rr = Ridge(alpha=0.035)
rr.fit(X, y)

return vect, vect2, rr, X, y



jobs = loadData( paths['train_data_path'] )
salaries, descriptions, titles = splitData(jobs)
vect, vect2, rr, X_train, y_train = fit(salaries, descriptions, titles)

最佳答案

我发现您的代码存在多个问题,直接影响其性能。

  1. 您多次枚举职位列表。您可以只枚举它一次,而是使用枚举列表(存储在变量中)。
  2. 您根本不使用枚举项中的值。您只需要索引,您可以使用内置的 range 函数轻松实现这一点。
  3. 每个列表都是以热切的方式生成的。发生的情况如下:第一个列表阻止程序的执行,需要一些时间才能完成。第二个和第三个列表的情况相同,计算完全相同。

我建议您做的是使用生成器,以便您以惰性方式处理数据。它的性能效率更高,并允许您随时随地提取数据。

def splitData(jobs):
for job in jobs:
yield job['salaryNormalized'], job['description'] + job['normalizedLocation'] + job['category'], job['title']

关于python - 加速使用列表理解的简单 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325456/

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