Swifter:向量化和非向量化函数的区别是什么?

时间:2019-04-01 09:21:20

标签: python pandas swifter

我需要学习有关熊猫速度优化的知识。关于我的问题非常有效的图书馆很快。但是我不了解文档,尤其是矢量化函数。

我的假设是更快的输入仅接受向量输入,而不接受数据帧。是吗?

在文档中,这是矢量化功能:

def bikes_proportion(x, max_x):
    return x * 1.0 / max_x

这是非矢量化函数:

def convert_to_human(datetime):
    return datetime.weekday_name + ', the ' + str(datetime.day) + 'th day of ' + datetime.strftime("%B") + ', ' + str(datetime.year)

有什么区别?

您能告诉我向量化和非向量化功能有什么区别吗?如果您以前使用过swifter。可以更快地使用数据框还是只能使用矢量?

1 个答案:

答案 0 :(得分:1)

我正在尽力在这里用简单的用例进行解释,

矢量化代码是指在矢量的多个分量上执行的操作 同一时间(用一条语句)

import numpy as np

a = np.array([1,2,3,4,5])
b = np.array([1,1,1,1,1])
c = a+b

请参阅以下代码,操作数是标量而不是向量,在 向量a的一个分量和向量b的一个分量

a = [1,2,3,4,5]
b = [1,1,1,1,1]
c = []
for a_, b_ in zip(a, b):
    c.append(a_ + b_)

您可以将其应用于数据框,参考号:https://github.com/jmcarpenter2/swifter

df = pd.DataFrame({'x': [1, 2, 3, 4], 'y': [5, 6, 7, 8]})
df['agg'] = df.swifter.apply(lambda x: x.sum() - x.min())