优化Python代码的4种方法( 三 )


3.在Python中向量化你的函数
摆脱慢循环的另一种方法是对函数进行向量化处理 。这意味着新创建的函数将应用于输入列表,并将返回结果数组 。Python中的向量化可以加速计算
【优化Python代码的4种方法】让我们在相同的Twitter Sentiment Analysis数据集对此进行验证 。
'''优化方法:向量化函数'''# 导入库import pandas as pd import numpy as npimport timeimport mathdata = https://www.isolves.com/it/cxkf/yy/Python/2019-10-08/pd.read_csv('train_E6oV3lV.csv')# 输出头部信息print(data.head())def word_count(x) : return len(x.split())# 使用Dataframe iterrows 计算词的个数print('nnUsing Iterrowsnn')start_time = time.time()data_1 = data.copy()n_words = []for i, row in data_1.iterrows(): n_words.append(word_count(row['tweet']))data_1['n_words'] = n_words print(data_1[['id','n_words']].head())end_time = time.time()print('nTime taken to calculate No. of Words by iterrows :',(end_time-start_time),'seconds')# 使用向量化方法计算词的个数print('nnUsing Function Vectorizationnn')start_time = time.time()data_2 = data.copy()# 向量化函数vec_word_count = np.vectorize(word_count)n_words_2 = vec_word_count(data_2['tweet'])data_2['n_words'] = n_words_2print(data_2[['id','n_words']].head())end_time = time.time()print('nTime taken to calculate No. of Words by numpy array : ',(end_time-start_time),'seconds')难以置信吧?对于上面的示例,向量化速度提高了80倍!这不仅有助于加速我们的代码,而且使其变得更整洁 。
4. Python中的多进程

多进程是系统同时支持多个处理器的能力 。
在这里,我们将流程分成多个任务,并且所有任务都独立运行 。当我们处理大型数据集时,即使apply函数看起来也很慢 。
因此,让我们看看如何利用Python中的多进程库加快处理速度 。
我们将随机创建一百万个值,并求出每个值的除数 。我们将使用apply函数和多进程方法比较其性能:
# 导入库import pandas as pdimport mathimport multiprocessing as mpfrom random import randint# 计算除数的函数def countDivisors(n) :count = 0 for i in range(1, (int)(math.sqrt(n)) + 1) :if (n % i == 0) :if (n / i == i) :count = count + 1 else :count = count + 2 return count # 创建随机数 random_data = https://www.isolves.com/it/cxkf/yy/Python/2019-10-08/[randint(10,1000) for i in range(1,1000001)]data = pd.DataFrame({'Number' : random_data })data.shape
优化Python代码的4种方法

文章插图
 
%%timedata['Number_of_divisor'] = data.Number.apply(countDivisors)
优化Python代码的4种方法

文章插图
 
%%timepool = mp.Pool(processes = (mp.cpu_count() - 1))answer = pool.map(countDivisors,random_data)pool.close()pool.join()
优化Python代码的4种方法

文章插图
 
在这里,多进程比apply方法快13倍 。性能可能会因不同的硬件系统而异,但肯定会提高性能 。
结束
这绝不是详尽的列表 。还有许多其他方法和技术可以优化Python代码 。但是我在数据科学生涯中发现并使用了很多这四个,相信你也会发现它们也很有用 。
英文原文网址
https://www.analyticsvidhya.com/blog/2019/09/4-methods-optimize-python-code-data-science/
在原文上可以在线执行代码




推荐阅读