파이썬의 벡터화

| | | | | | | | | |

알고리즘의 시간 복잡도는 애플리케이션이 신뢰할 수 있는지 여부를 결정하는 데 매우 중요합니다. 실시간 출력을 적용할 때 큰 알고리즘을 가능한 한 빨리 실행하는 것이 매우 중요합니다. 이를 위해 Python에는 루프를 작성할 필요 없이 전체 데이터 배열에 대한 연산을 신속하게 수행하기 위한 몇 가지 표준 수학 함수가 있습니다. 이러한 함수를 포함하는 라이브러리 중 하나는 numpy 입니다. 벡터화의 경우 이 표준 함수를 어떻게 사용할 수 있는지 봅시다.

벡터화란?
벡터화는 루프를 사용하지 않고 Python 코드의 속도를 높이는 데 사용됩니다. 이러한 함수를 사용하면 코드 실행 시간을 최소화하는 데 도움이 될 수 있습니다. 내적이라고도 하는 벡터의 내적과 같은 벡터에 대해 다양한 연산이 수행됩니다. 이는 단일 출력을 생성하기 때문에 결과가 나오는 외적을 생성하기 때문입니다. 정사각형 측정 매트릭스에서 벡터 길이의 길이 X, 요소의 곱과 동일하며 곱을 생성하는 인덱스 요소와 행렬의 차원은 변경되지 않은 상태로 유지됩니다.

우리는 기존 방법이 일반 함수보다 처리 시간을 계산하는 데 시간이 얼마나 더 걸리는지 확인하세요.

외부 (a, b): 두 벡터의 외적을 계산합니다.
곱하기(a, b): 두 배열의 행렬 곱.
내적(a, b): 두 배열의 내적.
0 ((n, m)): 0으로 채워진 주어진 모양과 유형의 행렬을 반환합니다.
process_time (): 현재 프로세스의 시스템 및 사용자 CPU 시간의 합계 값(초 단위)을 반환합니다. 수면 중 경과된 시간은 포함되지 않습니다.

내적:
내적 — 길이가 같은 두 벡터를 곱하여 하나의 숫자를 생성하는 대수 연산입니다. 내적은 종종 내적 이라고 합니다. 이 제품의 결과는 스칼라 수입니다. 길이가 같은 두 행렬 ab를 가정해 보겠습니다. 내적은 첫 번째 행렬을 전치하여 수행한 다음 곱셈을 수행합니다. 아래 이미지와 같이 a '(전치 a) 및 b에 의한 수학 행렬.

시각적 표현 내적 —

<그림 클래스 = aligncenter amp-wp-inline-103bba40295facddc6bb7885c6844059>

아래는 Python 코드입니다.


# 내적

가져오기 시간

가져오기 numpy

가져오기 배열


# 8바이트 int

a = array.array ( <코드 클래스 = "문자열"> `q` <코드 클래스 ="일반 ">)

for i 범위 <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 100000 <코드 클래스 = "pla in">):

a.append (i);


b = 배열. 배열( ` q` )

i 범위 ( <코드 클래스 = "값"> 100000 <코드 클래스 = "일반">, <코드 클래스 = "값"> 200000 <코드 클래스 = " 일반">):

b.append (i)


# 고전적인 내적 구현 벡터

tic = 시간.process_time ()

<코드 클래스 = "키워드"> = <코드 클래스 = "값"> 0.0 <코드 클래스 = "pla 에서">;


for i in 범위 ( len (a)):

+ = <코드 클래스 = "일반"> a [i] <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> b [i]


목차 = 시간.process_time ()


인쇄 <코드 클래스 = "일반"> ( <코드 클래스 = "문자열"> "dot_product =" <코드 클래스 = "키워드"> + <코드 클래스 = "functions"> str (점));

인쇄 ( "계산 시간 =" <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> str <코드 클래스 = "일반"> ( <코드 클래스 = "값" > 1000 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> (목차 <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> 틱)) <코드 클래스 = "키워드"> + <코드 클래스 = "문자열"> "ms" <코드 클래스 = "일반">)



n_tic = 시간 .process_time ()

<코드 클래스 = "일반 "> n_dot_product <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> numpy.dot (a, b)

<코드 클래스 = "plain"> n_toc = 시간.process_time ()


인쇄 <코드 클래스 = "일반"> ( <코드 클래스 = "문자열"> "n_dot_product =" <코드 클래스 = "키워드"> + <코드 클래스 = "functions"> str (n_dot_product))

인쇄 <코드 클래스 = " 일반"> ( "계산 시간 = + str <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 1000 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> (n_toc <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> n_tic)) <코드 클래스 = "키워드"> + <코드 클래스 = " string"> "ms" )

종료:

dot_product = 833323333350000.0 계산 시간 = 35.59449199999999ms n_dot_p roduct = 833323333350000 계산 시간 = 0.1559900000000225ms 

실외 곱:
텐서 곱 두 좌표 벡터의 것을 이라고 합니다. 외부 작업 . 차원이 nx 1 mx 1 인 두 벡터 ab를 고려하면 벡터의 외적은 다음과 같이 됩니다. 직사각형 행렬 nxm . 두 벡터의 차원이 같으면 결과 행렬은 그림과 같이 정방 행렬이 됩니다.

외부 곱의 시각적 표현 —

<그림 클래스 = aligncenter amp-wp-inline-103bba40295facddc6bb7885c6844059>

아래는 Python 코드입니다.


# 아웃도어 제품

가져오기 시간

가져오기 numpy

가져오기 배열


= <코드 클래스 = "일반"> array.array ( <코드 클래스 = "문자열"> `i` <코드 클래스 = "일반">)

i 범위 ( 200 ):

a.append (나);


b = 배열. 배열( ` i` )

i 범위 ( <코드 클래스 = "값"> 200 <코드 클래스 = "일반">, <코드 클래스 = "값"> 400 <코드 클래스 = " 일반">):

b.append (i)


# 고전적인 외부 제품 벡터 구현

tic = 시간.process_time ()

outer_product = numpy.zeros (( <코드 클래스 = "값"> 200 <코드 클래스 = "일반">, <코드 클래스 = "값"> 200 <코드 클래스 = "일반">))


i code> 범위 ( len a)):

for j 범위 ( len (b)):

outer_product [i] [j] = < 코드 클래스 = "일반"> a [i] <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> b [j]


목차 = 시간.process_time ()


인쇄 ( <코드 클래스 = "문자열"> "outer_product = <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> str < /코드> <코드 클래스 = "일반"> (outer_product));

인쇄 ( "계산 시간 =" <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> str <코드 클래스 = "일반"> ( <코드 클래스 = "값" > 1000 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> (목차 <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> 틱)) <코드 클래스 = "키워드"> + <코드 클래스 = "문자열"> "ms" <코드 클래스 = "일반">)


n_tic = 시간.process_time ()

outer_product <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> numpy.outer (a, b)

<코드 클래스 = "일반 "> n_toc = 시간.process_time ()

인쇄 ( "outer_product =" + str (outer_product)) ;

인쇄 ( "계산 시간 =" <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> 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.821617ms outer_product = [[0 0 0 ..., 0 0 0] [200 201 202 ..., 397 9] 4 [24039] 0 ..., 794 79 6 798] ..., [39400 39597 39794 ..., 78209 78406 78603] 0 ... 39600 39798 39996 ..., 78606 78804] 790 계산 시간 = 0.2809480000000031ms 

요소별 곱:
두 행렬의 요소별 곱하기 — 첫 번째 행렬의 각 요소에 나중 행렬의 해당 요소를 곱하는 대수 연산입니다. 행렬의 차원은 동일해야 합니다.
a의 요소 색인인 ab의 두 행렬을 고려하십시오. — 이들은 ij입니다. 그런 다음 a(i, j)b(i, j)를 곱합니다. , 각각, 아래 그림과 같이.

현명한 제품 요소의 시각적 표현 —

<그림 클래스 = aligncenter amp-wp-inline-103bba40295facddc6bb7885c6844059>

아래는 Python 코드입니다.


# 요소별 곱셈

가져오기 시간

가져오기 numpy

가져오기 배열

a = <코드 클래스 = "일반"> array.array ( <코드 클래스 = "문자열"> `i` <코드 클래스 ="일반 ">)

for i in 범위 <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 50000 < 코드 클래스 = "일반">):

<코드 클래스 = "일반"> a.append (i);


b = 배열. 배열( ` i` )

i 범위 ( <코드 클래스 = "값"> 50000 <코드 클래스 = "일반">, <코드 클래스 = "값"> 100000 <코드 클래스 = " 일반">):

b.append (i)


# 고전적인 항목별 제품 벡터 구현

벡터 = < 코드 클래스 = "일반"> numpy.zeros (( <코드 클래스 = "값"> 50000 <코드 클래스 = "일반">))


tic = 시간.process_time ()

for 나는 범위 ( len (a)):

벡터 [i] = a [i] * < 코드 클래스 = "일반"> b [i]

<코드 클래스 = "일반"> 목차 <코드 클래스 = "키워드"> = 시간.process_time ()


인쇄 ( "요소별 제품 = " + str (벡터 ));

인쇄 ( "계산 시간 =" <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> str <코드 클래스 = "일반"> ( <코드 클래스 = "값" > 1000 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> (목차 <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> 틱)) <코드 클래스 = "키워드"> + <코드 클래스 = "문자열"> "ms" <코드 클래스 = "일반">)



n_tic = 시간 .process_time ()

<코드 클래스 = "일반 "> 벡터 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> numpy.multiply (a, b)

<코드 클래스 = "plain"> n_toc = 시간.process_time ()


인쇄 ( "요소별 제품 =" + str <코드 클래스 = "일반"> (벡터));

인쇄 ( "계산 시간 =" <코드 클래스 = "키워드"> + <코드 클래스 = "함수"> str <코드 클래스 = "일반"> ( <코드 클래스 = "값" > 1000 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> (n_toc <코드 클래스 = "키워드"> - <코드 클래스 = "일반"> n_tic)) <코드 클래스 = "키워드"> + <코드 클래스 = "문자열"> "ms" <코드 클래스 = "일반">)

종료:

< Pre> 요소 Wise 제품 = [0.00000000E + 05.00010000E + 04 1.00004000E + 05 ..., 4.99955001E + 09 4.99955001E + 09 4.99970000E + 09 4.99970000E + 09 4.99985000E + 09 4.99985000E + 09] 계산 시간 = 23.516678000000013MS 요소 현명한 제품 = [0 50001 100004. .. , 704582713 704732708 704882705] 계산 시간 = 0.2250640000000248ms

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