优化Python代码的4种办法

小微 科技优化Python代码的4种办法已关闭评论104字数 3166阅读模式
摘要介绍我是一个程序员。从大学时代开始我就一直在进行编程,而我仍然对使用简单的Python代码所开辟的道路之多感到惊讶。但是我并不总是那么高效。我相信这是大多数程序员共有的一个特征,编...

介绍

我是一个程序员。从大学时期开始我就一直在进行编程,而我依然对使用简单的Python代码所开拓的道路之多感到诧异。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

然而我其实不老是那么高效。我相信这是大多数程序员共有的一个特征,编写代码的快感始终优先于效力以及简洁性。尽管这在咱们的大学期间有效,但在专业环境中,特别是在数据科学项目中,情况却大相径庭。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

作为数据科学家,编写优化的Python代码无比无比重要。杂乱,效力低下的代码即挥霍你的时间乃至挥霍你项目的钱。经验丰厚的数据科学家以及专业人员都知道,当咱们与客户合作时,杂乱的代码是不可接受的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

因而,在本文中,我将鉴戒我多年的编程经验来列出并展现四种可用于优化数据科学项目中Python代码的办法。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

优化是什么?文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

首先定义什么是优化。咱们将使用一个直观的示例进行此操作。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

这是咱们的问题:文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

假定给定一个数组,其中每一个索引代表一个城市,该索引的值代表该城市与下一个城市之间的距离。假定咱们有两个索引,咱们需要计算这两个索引之间的总距离。简单来讲,咱们需要找到两个给定索引之间距离的总以及。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

首先想到的是,一个简单的FOR循环在这里可以很好地工作。然而,如果有100,000多个城市,而咱们每一秒接管50,000多个查询,该如何办?你是不是依然认为FOR循环可以为咱们的问题提供足够好的解决方案?文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

FOR循环其实不能提供足够好的方案。这时候候优化就派上用场了文章源自微观生活(93wg.com)微观生活-https://93wg.com/4399.html

简单地说,代码优化象征着在生成正确结果的同时减少执行任何任务的操作数。

让咱们计算一下FOR循环执行此任务所需的操作数:

咱们必需在上面的数组中找出索引1以及索引3的城市之间的距离。

对于较小的数组大小,循环的机能优良

如果数组大小为100,000,查询数量为50,000,该如何办?

这是一个很大的数字。如果数组的大小以及查询数量进一步增添,咱们的FOR循环将花费大量时间。你能想到一种优化的办法,使咱们在使用较少数量的解决方案时可以发生正确的结果吗?

在这里,我将讨论一个更好的解决方案,通过使用前缀数组来计算距离来解决这个问题。让咱们看看它是怎么工作的:

你能理解吗?咱们只需一次操作就能够得到相同的距离!关于此办法的最佳的地方在于,不管索引之间的差是1还是100,000,都只需执行一个操作便可计算任意两个索引之间的距离。

我创立了一个样本数据集,其数组大小为100,000以及50,000个查询。你可以自己执行代码来比较二者所用的时间

注意:数据集总共有50,000个查询,你可以更改参数execute_queries以执行至多50,000个查询,并查看每一种办法执行任务所花费的时间。

import time
from tqdm import tqdm
data_file = open
distance_between_city = data_file.readline.split
queries = data_file.readlines
print)
print)
data_file.close
FOR循环办法
存储距离的列表
distances_for_loop = []
获取收场时间
end_time_for_loop = time.time
print,\'seconds\')
读取文件并存储距离以及查询
start_time_for_prefix = time.time
data_file = open
distance_between_city = data_file.readline.split
queries = data_file.readlines
创立前缀数组
prefix_array = []
prefix_array.append)
for i in range:
prefix_array.append + prefix_array[i-1]))
for query in tqdm:
query = query.split
startIndex = int
endIndex = int
if startIndex == 0:
distances_for_prefix_array.append
else:
distances_for_prefix_array.append)
data_file.close
end_time_for_prefix = time.time
print, \'seconds\')
导入库
import pandas as pd
import numpy as np
import time
import math
data = pd.read_csv
使用dataframe iterows计算字符数
print
start_time = time.time
data_1 = data.copy
n_words = []
for i, row in data_1.iterrows:
n_words.append))
data_1[\'n_words\'] = n_words
print)
end_time = time.time
print,\'seconds\')
使用apply办法计算字符数
print
start_time = time.time
data_3 = data.copy
data_3[\'n_words\'] = data_3[\'tweet\'].apply))
print)
end_time = time.time
print,\'seconds\')

你可能已经注意到apply办法比iterrows办法快得多。其机能可媲美与NumPy数组,但apply办法提供了更多的灵便性。你可以在此处浏览apply办法的文档。

2. Pandas.DataFrame.loc | Python数据处理的技能

这是我最

将热点城市保留在列表中
top_cities = [\'Brooklyn\',\'Bronx\',\'Manhattan\',\'Jamaica\',\'Long Island City\']
各个城市的频数
data.City.value_counts

Pandas来更新数据的值是无比容易的!这是解决此类数据处理任务的最优化办法。

3.在Python中向量化你的函数

解脱慢循环的另外一种办法是对函数进行向量化处理。这象征着新创立的函数将利用于输入列表,并将返回结果数组。Python中的向量化可以加速计算

让咱们在相同的Twitter Sentiment Analysis数据集对此进行验证。

\'\'\'
优化办法:向量化函数
\'\'\'
输出头部信息
print)
def word_count :
return len)
使用向量化办法计算词的个数
print
start_time = time.time
data_2 = data.copy
导入库
import pandas as pd
import math
import multiprocessing as mp
from random import randint
创立随机数
random_data = [randint for i in range]
data = pd.DataFrame
data.shape

%%time
data[\'Number_of_divisor\'] = data.Number.apply

%%time
pool = mp.Pool - 1))
answer = pool.map
pool.close
pool.join

在这里,多过程比apply办法快13倍。机能可能会因不同的硬件系统而异,但确定会提高机能。

收场

这毫不是详实的列表。还有许多其他办法以及技术可以优化Python代码。然而我在数据科学生涯中发现并使用了不少这四个,相信你也会发现它们也颇有用。

英文原文网址

https://www.analyticsvidhya.com/blog/2019/09/4-methods-optimize-python-code-data-science/

在原文上可以在线执行代码

以上就是微观生活(93wg.com)关于“优化Python代码的4种办法”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/4399.html