Pythonでのベクトル化

| | | | | | | | | |

アプリケーションが信頼できるかどうかを判断するには、アルゴリズムの時間計算量が非常に重要です。リアルタイム出力を適用する場合、大規模なアルゴリズムを可能な限り迅速に実行することが非常に重要です。これを行うために、Pythonには、ループを記述せずにデータの配列全体に対して操作をすばやく実行するためのいくつかの標準的な数学関数があります。そのような関数を含むそのようなライブラリの1つは、 numpy です。ベクトル化の場合にこの標準関数をどのように使用できるか見てみましょう。

ベクトル化とは何ですか?
ベクトル化は、ループを使用せずにPythonコードを高速化するために使用されます。このような関数を使用すると、コードの実行時間を最小限に抑えることができます。さまざまな操作がベクトルに対して実行されます。たとえば、ドット積は単一の出力を生成するため、結果として外部積が生成されるため、ドット積とも呼ばれます。正方形の測定行列で。ベクトルの長さの長さXに等しく、要素による乗算は、積を生成します。インデックスの要素と行列の次元は変更されません。

従来の方法が通常の関数よりもどのように時間がかかるかを確認し、処理時間を計算します。

外部(a、b):2つのベクトルの外積を計算します。
乗算(a、b):2つの配列の行列積。
ドット(a、b):2つの配列の内積。
ゼロ((n、m)):指定された形状とタイプの行列を返し、ゼロで埋めます。
process_time ():現在のプロセスのシステム時間とユーザーCPU時間の合計の値(秒単位)を返します。睡眠中の経過時間は含まれません。

内積:
内積—これは、同じ長さの2つのベクトルを乗算して、1つの数値を生成する代数演算です。ドット積は、多くの場合、内積と呼ばれます。この積はスカラー数になります。同じ長さの2つの行列abを考えてみましょう。ドット積は、最初の行列を転置することによって実行され、次に乗算が実行されます。下の画像に示すように、 a' (転置a)と bによる数学行列の変換。

視覚的表現ドット積の—

以下はPythonコードです:


#ドット製品

import 時間

import numpy

import 配列


#8バイトint

a = array.array( `q`

for i in range 100000 ):

a.append(i);


b = 配列。配列( `q`

for i in range 100000 200000 ):

b.append(i)


#クラシックドット製品実装ベクトル

tic = 時間。process_time ()

dot = 0.0 ;


for i in range len (a)):

dot + = a [i] * b [i]


toc = time。 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 = 時間。 process_time ()


print "n_dot_product =" + str (n_dot_product))

print "計算時間=" + str 1000 * (n_toc - n_tic)) + " ms "

終了:

 dot_product=833323333350000.0計算時間=35.59449199999999msn_dot_p roduct=833323333350000計算時間=0.1559900000000225ms

屋外積:
2つの座標ベクトルのテンソル積と呼ばれます。外部作業。次元がnx1mx1の2つのベクトルabを考えると、ベクトルの外積は次のようになります。長方形の行列nxm 。2つのベクトルの次元が同じである場合、結果の行列は、図に示すように正方行列になります。

外部積の視覚的表現—

Pythonコードは次のとおりです。


#屋外製品

インポート時間

import numpy

import 配列


a = array.array( `i` < / p>

for i in 範囲 200 ):

a.append (私);


b = 配列。配列( `i`

for i in range 200 400 ):

b.append(i)


#従来の外部製品ベクトルの実装

tic = 時間。process_time ()

external_product = numpy.zeros(( 200 200 ))


for i in range len ( a)):

for j in range len (b)):

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


toc = time。 process_time ()


印刷 "outer_product =" + str (outer_product));

print "計算時間=" + str 1000 * (toc - tic)) + "ms"


n_tic = time。 process_time ()

external_product = numpy.outer(a、b)

n_toc = 時間。 process_time ()

< / p>

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

print "計算時間=" + str 1000 * (n_toc - n_tic)) + "ms"


終了:

 external_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.821617msouter_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 79202 79401]]計算時間=0.2809480000000031ms

要素ごとの積:
2つの行列の要素ごとの乗算&#8212;これは代数演算であり、最初の行列の各要素に、後の行列の対応する要素が乗算されます。行列の次元は同じである必要があります。
2つの行列ab a の要素インデックスを検討してください&#8212;これらはijであり、 a(i、j)b(i、j)を掛けます。 、それぞれ、下の図に示すように。

賢明な製品要素の視覚的表現&#8212;

以下はPythonコードです:


#要素ごとの乗算

import 時間

import numpy

import 配列< / p>

a = array.array( `i`

for i in 範囲 50000 ):

a.append(i);


b = 配列。配列( `i`

for i in range 50000 100000 ):

b.append(i)


#従来のアイテムごとの製品ベクトルの実装

ベクトル = numpy.zeros(( 50000 ))


tic = time。 process_time ()

for i in range len (a)):

vector [i] = a [i] * b [i]

toc = 時間。 process_time ()


print "要素ごとの製品= " + str (vector ));

print "計算時間=" + str 1000 * (toc - tic)) + "ms"



n_tic = 時間。process_time ()

ベクトル<コードクラス="キーワード">=<コードクラス="プレーン">numpy.multiply(a、b)

<コードクラス= "plain"> n_toc = 時間。 process_time ()


印刷 "Element wise Product =" + str (vector));

print "計算時間=" + str 1000 * (n_toc - n_tic)) + "ms"

終了:

要素ごとの製品=[0.00000000e+ 00 5.00010000e + 04 1.00004000e + 05 ...、4.99955001e + 09 4.99970000e + 09 4.99985000e+09]計算時間=23.516678000000013ms要素ごとの製品=[050001100004。 ..、704582713704732708704882705]計算時間=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


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