加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

优化Python代码的4种要领

发布时间:2019-10-10 11:58:43 所属栏目:建站 来源:人工智能遇见磐创
导读:先容 我是一个措施员。从大学期间开始我就一向在举办编程,而我如故对行使简朴的Python代码所开发的阶梯之多感想惊奇。 可是我并不老是那么高效。我信托这是大大都措施员(尤其是刚起步的措施员)共有的一个特性,编写代码的快感始终优先于服从和简捷性。虽
副问题[/!--empirenews.page--]

先容

我是一个措施员。从大学期间开始我就一向在举办编程,而我如故对行使简朴的Python代码所开发的阶梯之多感想惊奇。

可是我并不老是那么高效。我信托这是大大都措施员(尤其是刚起步的措施员)共有的一个特性,编写代码的快感始终优先于服从和简捷性。固然这在我们的大学时代有用,但在专业情形中,尤其是在数据科学项目中,环境却截然不同。

优化Python代码的4种要领

作为数据科学家,编写优化的Python代码很是很是重要。混乱,服从低下的代码即挥霍你的时刻乃至挥霍你项目标钱。履历富厚的数据科学家和专业职员都知道,当我们与客户相助时,混乱的代码是不行接管的。

因此,在本文中,我将小心我多年的编程履素来列出并展示四种可用于优化数据科学项目中Python代码的要领。

优化是什么?

起首界说什么是优化。我们将行使一个直观的示例举办此操纵。

这是我们的题目:

假设给定一个数组,个中每个索引代表一个都市,该索引的值代表该都市与下一个都市之间的间隔。假设我们有两个索引,我们必要计较这两个索引之间的总间隔。简朴来说,我们必要找到两个给定索引之间间隔的总和。

优化Python代码的4种要领
优化Python代码的4种要领

起首想到的是,一个简朴的FOR轮回在这里可以很好地事变。可是,假若有100,000多个都市,而我们每秒吸取50,000多个查询,该怎么办?你是否如故以为FOR轮回可觉得我们的题目提供足够好的办理方案?

FOR轮回并不能提供足够好的方案。这时辰优化就派上用场了

简朴地说,代码优化意味着在天生正确功效的同时镌汰执行任何使命的操纵数。

让我们计较一下FOR轮回执行此使命所需的操纵数:

优化Python代码的4种要领

我们必需在上面的数组中找出索引1和索引3的都市之间的间隔。

优化Python代码的4种要领

对付较小的数组巨细,轮回的机能精采

假如数组巨细为100,000,查询数目为50,000,该怎么办?

优化Python代码的4种要领

这是一个很大的数字。假如数组的巨细和查询数目进一步增进,我们的FOR轮回将耗费大量时刻。你能想到一种优化的要领,使我们在行使较少数目的办理方案时可以发生正确的功效吗?

在这里,我将接头一个更好的办理方案,通过行使前缀数组来计较间隔来办理这个题目。让我们看看它是怎样事变的:

优化Python代码的4种要领
优化Python代码的4种要领
优化Python代码的4种要领

你能领略吗?我们只需一次操纵就可以获得沟通的间隔!关于此要领的最好之处在于,无论索引之间的差是1照旧100,000,都只需执行一个操纵即可计较恣意两个索引之间的间隔。

我建设了一个样本数据集,其数组巨细为100,000和50,000个查询。你可以本身执行代码来较量两者所用的时刻

留意:数据集总共有50,000个查询,你可以变动参数execute_queries以执行最多50,000个查询,并查察每种要领执利用命所耗费的时刻。

  1. import time 
  2. from tqdm import tqdm 
  3. data_file = open('sample-data.txt', 'r') 
  4. distance_between_city = data_file.readline().split() 
  5. queries = data_file.readlines() 
  6. print('SIZE OF ARRAY = ', len(distance_between_city)) 
  7. print('TOTAL NUMBER OF QUERIES = ', len(queries)) 
  8. data_file.close() 
  9. # 分派要执行的查询数 
  10. execute_queries = 2000 
  11. print('nnExecuting',execute_queries,'Queries') 
  12. # FOR轮回要领 
  13. # 读取文件并存储间隔和查询 
  14. start_time_for_loop = time.time() 
  15. data_file = open('sample-data.txt', 'r') 
  16. distance_between_city = data_file.readline().split() 
  17. queries = data_file.readlines() 
  18. # 存储间隔的列表 
  19. distances_for_loop = [] 
  20. # 计较开始索引和竣事索引之间的间隔的函数 
  21. def calculateDistance(startIndex, endIndex): 
  22.  distance = 0 
  23.  for number in range(startIndex, endIndex+1, 1): 
  24.  distance += int(distance_between_city[number]) 
  25.  return distance 
  26. for query in tqdm(queries[:execute_queries]): 
  27.  query = query.split() 
  28.  startIndex = int(query[0]) 
  29.  endIndex = int(query[1]) 
  30.  distances_for_loop.append(calculateDistance(startIndex,endIndex)) 
  31. data_file.close() 
  32. # 获取竣事时刻 
  33. end_time_for_loop = time.time() 
  34. print('nnTime Taken to execute task by for loop :', (end_time_for_loop-start_time_for_loop),'seconds') 
  35. # 前缀数组要领 
  36. # 读取文件并存储间隔和查询 
  37. start_time_for_prefix = time.time() 
  38. data_file = open('sample-data.txt', 'r') 
  39. distance_between_city = data_file.readline().split() 
  40. queries = data_file.readlines() 
  41. # 存储间隔列表 
  42. distances_for_prefix_array = [] 
  43. # 建设前缀数组 
  44. prefix_array = [] 
  45. prefix_array.append(int(distance_between_city[0])) 
  46. for i in range(1, 100000, 1): 
  47.  prefix_array.append((int(distance_between_city[i]) + prefix_array[i-1])) 
  48. for query in tqdm(queries[:execute_queries]): 
  49.  query = query.split() 
  50.  startIndex = int(query[0]) 
  51.  endIndex = int(query[1]) 
  52.  if startIndex == 0: 
  53.  distances_for_prefix_array.append(prefix_array[endIndex]) 
  54.  else: 
  55.  distances_for_prefix_array.append((prefix_array[endIndex]-prefix_array[startIndex-1])) 
  56. data_file.close() 
  57. end_time_for_prefix = time.time() 
  58. print('nnTime Taken by Prefix Array to execute task is : ', (end_time_for_prefix-start_time_for_prefix), 'seconds') 
  59. # 搜查功效 
  60. correct = True 
  61. for result in range(0,execute_queries): 
  62.  if distances_for_loop[result] != distances_for_prefix_array[result] : 
  63.  correct = False 
  64. if correct: 
  65.  print('nnDistance calculated by both the methods matched.') 
  66. else: 
  67.  print('nnResults did not matched!!') 

功效极大的节减了时刻,这就是优化Python代码的重要性。我们不只节减时刻,并且还可以节减许多计较资源!

你也许想知道这些怎样应用于数据科学项目。你也许已经留意到,许多时辰我们必需对大量数据点执行沟通的查询。在数据预处理赏罚阶段尤其云云。

我们必需行使一些优化的技能而不是根基的编程来尽也许快速高效地完成事变。因此,这里我将分享一些我用来改造和优化Python代码的优越技能

1. Pandas.apply() | 特性工程的钻石级函数

Pandas已经是一个高度优化的库,可是我们大大都人如故没有充实操作它。此刻你思索一下在数据科学中会行使它的常见处所。

我能想到的一项是特性工程,我们行使现有特性建设新特性。最有用的要领之一是行使Pandas.apply()。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读