01 使用哈希表的数据结构

如果在程序中遇到大量搜索操作时,并且数据中没有重复项,则可以使用查找而不是循环。举例如下:

items = ['a', 'b',..,'100m'] #1000s of items
found = False
for i in items:
if (i == '100m'):
found = True

可以改写为

items = {'a':'a', 'b':'b:,..,'100m':'100m'} #each item is key/value
found = False
if '100m' in items:
found = True

02 矢量化取代循环

尽量使用基于C构建的Python库,例如Numpy,Scipy和Pandas,并且利用矢量化同时处理来取代程序中编写多次处理数组单个元素的循环,循环可能是程序优化最容易被拿来开刀的地方了。举例如下:在对数组中每个元素求平方时直接用数组相乘,而不是两个for循环。

import numpy as np
array = np.array([[1., 2., 3.], [4., 5., 6.]])
m_array = array*array

03 精简代码行数

在编程时,尽量使用一些python的内置函数来精简代码行数,是代码显得简洁凝练,大大提高代码运行效率。举例如下:

  newlist = []
def my_fun(a):
return a + 't'
for w in some_list:
newlist.append(my_fun(w))

可以改写为

def my_fun(a):
return a + 't'
newlist = map(my_fun, some_list)

04 使用多进程

一般计算机都是多进程的,那么在执行操作时可以使用Python中的multiproccessing。多进程可在代码中实现并行化。 当您要实例化新进程,访问共享内存时,多进程成本很高,因此如果有大量数据处理时可以考虑使用多进程。 对于少量数据,则不提倡使用多进程。举例如下:

def some_func(d):
#computations
data = [1,2,..,10000] #large data
for d in data:
some_func(d)

可以改写为

import multiprocessing
def some_func(d):
#computations
data = [1,2,..,10000] #large data
pool = multiprocessing.Pool(processes=number_of_processors)
r = pool.map(some_func, data)
pool.close()

05 使用Cpython

Cython是一个静态编译器,可以为您优化代码。加载cypthonmagic扩展并使用cython标记使用cython编译代码。

Cpython的安装:

pip install Cython 

Cpython的使用:

% load_ext cythonmagic
%%cython
def do_work():
... #computationally intensive work

06 尽量使用csv替代xlsx

在进行数据处理时, 我需要更长的时间才能将数据加载到excel文件或从excel文件保存数据。 相反,我选择了创建多个csv文件的路径,并创建了一个文件夹来对文件进行分组。举例如下:

  df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2'])
df.to_excel("my.xlsx")
df2 = df.copy()
with pd.ExcelWriter('my.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet_name_1')
df2.to_excel(writer, sheet_name='Sheet_name_2')

可以改写为

df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2'])
df2 = df.copy()
df.to_csv("my.csv")
df2.to_csv("my.csv")

07 使用Numba

它是一个JIT(即时)编译器。 通过装饰器,Numba将带注释的Python和NumPy代码编译为LLVM 。将您的功能分为两部分:

1.执行计算的函数 - 使用@autojit进行装饰

2.执行IO的功能

from numba import jit, autojit
@autojit
def calculation(a):
.... def main():
calc_result = calculation(some_object) d = np.array(calc_result)
#save to file
return d

08 使用Dask来并行化Pandas DataFrame

Dask很棒! 它帮助我处理数据框中的数值函数和并行的numpy。 我甚至试图在集群上扩展它,它就是这么简单!

 import pandas as pd
import dask.dataframe as dd
from dask.multiprocessing import get
data = pd.DataFrame(...) #large data set
def my_time_consuming_function(d):
.... #long running function
ddata = dd.from_pandas(data, npartitions=30)
def apply_my_func(df):
return df.apply(
(lambda row: my_time_consuming_function(*row)), axis=1)
def dask_apply():
return ddata.map_partitions(apply_my_func).compute(get=get)

09 使用Pandarallel库

Pandarallel可以将pandas操作与多个进程并行化同样,仅在您拥有大型数据集时使用。

 from pandarallel import pandarallel
from math import sin
pandarallel.initialize()
# ALLOWED
def my_time_consuming_function(x):
.... df.parallel_apply(my_time_consuming_function, axis=1)

总结

对于提高Python的性能,第一是先编写简洁,高效的代码。 我们必须确保代码不会在循环中反复执行相同的计算。第二不要为集合中的每个记录打开/关闭IO连接。第三要确保在不需要时不创建新的对象实例。通过大量的编程练习,掌握一些高级的编程方法对你十分重要。

加快Python运行速度的更多相关文章

  1. selenium,unittest——参数化url,并多线程加快脚本运行速度

    利用参数化连续打开网页: #encoding=utf-8import unittestimport paramunittestimport timefrom selenium import webdr ...

  2. 一行代码让你的python运行速度提高100倍

    转自:https://www.cnblogs.com/xihuineng/p/10630116.html 加上之后运行速度快了十倍,我的天呐. python一直被病垢运行速度太慢,但是实际上pytho ...

  3. 加快AndroidStudio运行速度的方法

    之前用过其他人加速AndroidStudio构建速度的方法,确实在编译时有一定的效果 但是在实际使用中,随着项目越来越大,AndroidStudio有时还是会卡死,或者直接黑屏,我的笔记本是8g内存 ...

  4. 修改pip安装源加快python模块安装

    用pip安装依赖包时默认访问https://pypi.python.org/simple/,但是经常出现不稳定以及访问速度非常慢的情况,国内厂商提供的pipy镜像目前可用的有: http://pypi ...

  5. 【转】利用Psyco提升Python运行速度

    转自:http://www.leeon.me/a/use-Psyco-to-improve-Python-speed Psyco 是严格地在 Python 运行时进行操作的.也就是说,Python 源 ...

  6. 更换镜像加快python pip 安装扩展库的速度

    一些镜像源: 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科 ...

  7. Python 资源大全中文版

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  8. [转载]Python 资源大全

    原文链接:Python 资源大全 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex  ...

  9. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

随机推荐

  1. background & background-image & border-image

    background & background-image & border-image https://developer.mozilla.org/en-US/docs/Web/CS ...

  2. 「NGK每日快讯」12.24日NGK第51期官方快讯!

  3. 2021-2-20:请你说说分布式系统 BASE 理论是什么?

    BASE 理论是由 Dan Pritchett 在 ACM 上发表的一篇论文中提出的理论.是在 CAP 理论基础上提出的一种更实际的理论指导,和 PACELC 理论是有些相近的地方的. BASE 是指 ...

  4. django学习-18.*args和**kwargs的用法和使用场景

    目录结构 1.前言 2.[*args]的用法 2.1.第一步:首先编写这样的函数[test1]. 2.2.第二步:给函数[test1]赋值相关入参值. 2.3.第三步:调用函数[test1],得到以下 ...

  5. oracle之用户

    命令都是在命令行窗口执行 创建用户 1)登陆管理员用户 sqlplus system/密码 sqlplus system/briup 注意不要以分号结尾 2)创建用户 create user 用户名 ...

  6. ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

    ConcurrentHashMap线程安全的,允许一边更新.一边遍历,也就是说在对象遍历的时候,也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,而如果用Hash ...

  7. 1.3 PHP+MYSQL+APACHE配置(序)

    本节对服务器端web服务进行配置.事实上,对于配置这个环境(WAMP)网上还是有很多教程的,大家可以通过网上的教程完成配置,也不必拘泥于本文.甚至网上有免费的服务器端软件可以选择,比如著名的phpst ...

  8. Portainer中文汉化

    一.概述 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swar ...

  9. GetQueuedCompletionStatus客户端前端和server之间的通信

    项目中遇到了这个东西,怎么都调试不到.记录下. 一.完成端口IOCP https://www.cnblogs.com/yuanchenhui/p/iocp_windows.html

  10. 【python3.x】发送自动化测试报告邮件

    ​ SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.python的smtplib提供了 ...