Векторизация в Python

| | | | | | | | | |

Временная сложность любого алгоритма очень важна для принятия решения о надежности приложения. Запуск большого алгоритма как можно быстрее очень важен, когда речь идет о применении вывода в реальном времени. Для этого в Python есть несколько стандартных математических функций для быстрого выполнения операций над целыми массивами данных без необходимости написания циклов. Одной из таких библиотек, которая содержит такую функцию, является numpy . Давайте посмотрим, как мы можем использовать эту стандартную функцию в случае векторизации.

Что такое векторизация?
Векторизация используется для ускорения кода Python без использования цикла. Использование такой функции может помочь минимизировать время выполнения кода. С вектором выполняются различные операции, такие как скалярное произведение векторов, также известное как скалярное произведение, поскольку оно дает один выходной результат, внешние произведения, которые в квадратной матрице измерений. равна длине X длины векторов, умножение на элемент которого дает произведение. Элемент индексов и размерность матрицы остаются неизменными.

Будем посмотрите, как классические методы занимают больше времени, чем обычные функции, вычисляя время их обработки.

outer (a, b): вычисление внешнего произведения двух векторов.
умножить (a, b): матричное произведение двух массивов.
точка (a, b): скалярное произведение двух массивов.
нули ((n, m)): возвращает матрицу заданной формы и типа, заполненную нулями.
process_time (): Возвращает значение (в долях секунды) суммы системного и пользовательского процессорного времени текущего процесса. Он не включает время, прошедшее во время сна.

Дополнительный продукт:
Дополнительный продукт — это алгебраическая операция, при которой два вектора одинаковой длины умножаются так, что получается одно число. Дот-продукт часто называют внутренним продуктом . Результатом этого произведения является скалярное число. Рассмотрим две матрицы a и b одинаковой длины, скалярное произведение выполняется путем транспонирования первой матрицы, а затем выполняется умножение математической матрицы на a ' (переставить a) и b,, как показано на изображении ниже.

Визуальное представление скалярного произведения —

Ниже приведен код Python:


# Dot product

импорт время

import numpy

import массив


# 8 байт int

a = array.array ( `q` )

for i in диапазон ( 100000 ):

a.append (i);


b = массив. массив ( ` q` )

для i in диапазон ( 100000 , 200000 ):

b.append (i)


# классические векторы реализации скалярного произведения

tic = время.process_time ()

точка = 0.0 ;


for i in диапазон ( len (a)):

точка + = a [i] * b [i]


toc = время.process_time ()


print ( "dot_product =" + str (точка));

print ( "Время вычисления =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = время .process_time ()

n_dot_product = numpy.dot (a, b)

n_toc = time.process_time ()


print ( "n_dot_product =" + str (n_dot_product))

print ( "Время вычисления =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Выход:

dot_product = 833323333350000,0 Время вычисления = 35,59449199999999 мс n_dot_p roduct = 833323333350000 Время вычисления = 0,1559900000000225 мс 

Outdoor product:
Тензорное произведение двух векторов координат называется Внешняя работа . Рассмотрим два вектора a и b размерами nx 1 и mx 1 , тогда внешнее произведение вектора приводит к прямоугольная матрица nxm . Если два вектора имеют одинаковую размерность, то результирующая матрица будет квадратной матрицей, как показано на рисунке.

Визуальное представление внешнего произведения —

Ниже приведен код Python:


# Наружный продукт

импорт время

import numpy

импортировать массив


a = array.array ( `i` )

for i in диапазон ( 200 ):

a.append (я);


b = массив. массив ( ` i` )

для i in диапазон ( 200 , 400 ):

b.append (i)


# классические реализации вектора внешнего продукта

tic = время.process_time ()

external_product = numpy.zeros (( 200 , 200 ))


для i для диапазон ( len ( a)):

for j in диапазон ( len (b)):

external_product [i] [j] = a [i] * b [j]


toc = время.process_time ()


print ( "outer_product =" + str (outer_product));

print ( "Время вычисления =" + str ( 1000 * (toc - tic)) + "ms" )


n_tic = время.process_time ()

external_product = numpy.outer (a, b)

n_toc = время.process_time ()

print ( "outer_product =" + str (outer_product)) ;

print ( "Время вычисления =" + str ( 1000 * (n_toc - n_tic)) + "ms" )


Выход:

outer_product = [[0. 0. 0. ... , 0. 0. 0.] [200.201.202. ..., 397. 398. 399.] [400. 402. 404. ..., 794. 796. 798.] ..., [39400. 39597. 39794. ..., 78209. 78406. 78603. ] [39600. 39798. 39996. ..., 78606. 78804. 79002.] [39800. 39999. 40198. ... , 79202. 79401.]] Время вычисления = 39,821617 мс external_product = [[0 0 0 ..., 0 0 0] [200 201 202 ..., 397 398 399] [400 402 404 ..., 794 79 6 798] ..., [39400 39597 39794 ..., 78209 78406 78603] [39600 39798 39996 ..., 78606 78804 79002] [39800 39999 40198 ..., 79003 792013] 792013 Время вычисления = 0,2809480000000031 мс 

Поэлементное произведение:
Поэлементное умножение двух матриц — это алгебраическая операция, в которой каждый элемент первой матрицы умножается на соответствующий элемент последующей матрицы. Размеры матриц должны быть одинаковыми.
Рассмотрите две матрицы a и b, индекс элемента в a — это i и j, затем a (i, j) умножается на b (i, j) , соответственно, как показано на рисунке ниже.

Визуальное представление элемента wise product —

Ниже приведен код Python:


# Поэлементное умножение

import time

import numpy

import array

a = array.array ( `i` )

for i in диапазон ( 50000 ):

a.append (i);


b = массив. массив ( ` i` )

для i in диапазон ( 50000 , 100000 ):

b.append (i)


# классические поэлементные векторные реализации продукта

vector = numpy.zeros (( 50000 ))


тик = время.process_time ()

for i in range ( len (a)):

вектор [i] = a [i] * b [i]

toc = time.process_time ()


print ( "Element wise Product = " + str (вектор ));

print ( "Время вычисления =" + str ( 1000 * (toc - tic)) + "ms" )



n_tic = время .process_time ()

вектор = numpy.multiply (a, b)

n_toc = время.process_time ()


print ( "Element wise Product =" + str (vector));

print ( "Время вычисления =" + str ( 1000 * (n_toc - n_tic)) + "ms" )

Выход:

< Pre> Element Wise Product = 00 5.00000000E + 00 5.00010000E + 04 1.00004000E + 05 ..., 4.99955001e + 09 4.99970000E + 09 4.99985000E + 09] Время вычислений = 23.516678000000000013MS Элемент Wise Production = [0 50001 100004. .. , 704582713 704732708 704882705] Время вычисления = 0,2250640000000248 мс

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method