Swifter: в чем разница векторизованной и не векторизованной функции? - PullRequest
1 голос
/ 01 апреля 2019

Мне нужно узнать об оптимизации скорости панд.Библиотека, которая очень эффективна в моей проблеме, быстрее.Но я не понимаю документации, особенно векторизованной функции.

Я предполагаю, что более быстрый ввод допускает только векторный ввод, а не фрейм данных.это неправильно?

в документации это векторизованная функция:

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 раньше.может работать с dataframe или только с вектором?

1 Ответ

1 голос
/ 01 апреля 2019

Я стараюсь изо всех сил объяснить здесь простой пример использования,

Векторизованный код относится к операциям, которые выполняются над несколькими компонентами вектора на то же время (в одном утверждении)

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_)

Swifter, который вы можете применить к кадру данных, ref: 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())
...