目次
#ベクトル化とは何ですか? " >#ベクトル化とは何ですか?
数学演算" >数学演算
If-else ステートメント " >If-else ステートメント
機械学習/ディープ ラーニング ネットワークを解く" >機械学習/ディープ ラーニング ネットワークを解く
結論" >結論
ホームページ バックエンド開発 Python チュートリアル ベクトル化を使用して Python のループを置き換える

ベクトル化を使用して Python のループを置き換える

Apr 14, 2023 pm 07:07 PM
サイクル パイソン 交換する

すべてのプログラミング言語はループから切り離せません。したがって、デフォルトでは、繰り返し操作があるたびにループの実行を開始します。しかし、多数の反復 (数百万行/数十億行) を扱う場合、ループの使用は犯罪です。数時間動けなくなって、後でそれがうまくいかないことに気づくかもしれません。ここで、Python でのベクトル化の実装が非常に重要になります。

ベクトル化を使用して Python のループを置き換える


#ベクトル化とは何ですか?

ベクトル化は、データ セットに対する (NumPy) 配列操作を実装するための手法です。バックグラウンドで、配列または系列のすべての要素に操作を一度に適用します (一度に 1 行を操作する「for」ループとは異なります)。

次に、いくつかのユースケースを使用して、ベクトル化とは何かを説明します。

数値の合計を求める
##使用循环
import time 
start = time.time()

 
# iterative sum
total = 0
# iterating through 1.5 Million numbers
for item in range(0, 1500000):
total = total + item


print('sum is:' + str(total))
end = time.time()

print(end - start)

#1124999250000
#0.14 Seconds
ログイン後にコピー
## 使用矢量化
import numpy as np

start = time.time()

# vectorized sum - using numpy for vectorization
# np.arange create the sequence of numbers from 0 to 1499999
print(np.sum(np.arange(1500000)))

end = time.time()

print(end - start)


##1124999250000
##0.008 Seconds
ログイン後にコピー

レンジ関数を使用した反復と比較して、ベクトル化の実行時間は約 18 倍短縮されます。この違いは、Pandas DataFrame を使用する場合にさらに顕著になります。

数学演算

データ サイエンスでは、Pandas DataFrame を使用する場合、開発者はループを使用して数学演算を通じて新しい派生列を作成します。

以下の例では、このようなユースケースでループをベクトル化に置き換えるのがいかに簡単であるかがわかります。

DataFrame は、行と列の形式の表形式のデータです。

500 万行と 0 から 50 までのランダムな値が入った 4 列を持つ pandas DataFrame を作成します。

ベクトル化を使用して Python のループを置き換える

import numpy as np 
import pandas as pd 
df = pd.DataFrame(np.random.randint( 0 , 50 , size=( 5000000 , 4 )), columns=( 'a' , 'b' , 'c' , 'd ' )) 
df.shape 
# (5000000, 5)
 df.head()
ログイン後にコピー

新しい列「ratio」を作成して、列「d」と「c」の比率を調べます。

## 循环遍历
import time 
start = time.time() 

# 使用 iterrows 遍历 DataFrame 
for idx, row in df.iterrows(): 
# 创建一个新列
df.at[idx, 'ratio' ] = 100 * (row[ "d" ] / row[ "c" ]) 
end = time.time() 
print (end - start) 
### 109 秒
ログイン後にコピー
## 使用矢量化
start = time.time() 
df[ "ratio" ] = 100 * (df[ "d" ] / df[ "c" ]) 

end = time.time() 
print (end - start) 
### 0.12 秒
ログイン後にコピー

DataFrame では大幅な改善が見られ、ベクトル化された操作は Python のループと比べてほぼ 1000 倍速くなりました。

If-else ステートメント

「If-else」タイプのロジックを使用する必要がある多くの操作を実装しました。このロジックは、Python のベクトル化された操作に簡単に置き換えることができます。

よりよく理解するために、次の例を見てみましょう (ユースケース 2 で作成した DataFrame を使用します):

既存の列「a」に基づいてデータを作成したいと想像してください。 "

## 使用循环
import time 
start = time.time() 

# 使用 iterrows 遍历 DataFrame 
for idx, row in df.iterrows(): 
if row.a == 0 : 
df.at[idx, 'e' ] = row.d 
elif ( row.a <= 25 ) & (row.a > 0 ): 
df.at[idx, 'e' ] = (row.b)-(row.c) 
else : 
df.at[idx, 'e' ] = row.b + row.c 

end = time.time() 

print (end - start) 
### 耗时:166 秒
ログイン後にコピー
## 矢量化
start = time.time() 
df[ 'e' ] = df[ 'b' ] + df[ 'c' ] 
df.loc[df[ 'a' ] <= 25 , 'e' ] = df [ 'b' ] -df[ 'c' ] 
df.loc[df[ 'a' ]== 0 , 'e' ] = df[ 'd' ]end = time.time()
打印(结束 - 开始)
## 0.29007707595825195 秒
ログイン後にコピー

に何らかの条件を付けて新しい列 "e" を作成します。ベクトル化された操作は、if-else ステートメントを使用した Python ループと比較して 600 倍高速です。

機械学習/ディープ ラーニング ネットワークを解く

ディープ ラーニングでは、複数の複雑な方程式を解く必要があり、解決すべき方程式は何百万も存在します。 10 億行問題を解決します。 Python でこれらの方程式を解くためにループを実行すると非常に時間がかかるため、ベクトル化が最適な解決策です。

たとえば、次の重線形回帰式で数百万行の y 値を計算します。


ループの代わりにベクトル化できます。

ベクトル化を使用して Python のループを置き換える

m1、m2、m3... の値は、x1、x2、x3 に対応する数百万の値を使用して上記の方程式を解くことによって決定されます。 .

ベクトル化を使用して Python のループを置き換える

ベクトル化を使用して Python のループを置き換える

import numpy as np 
# 设置 m 的初始值
m = np.random.rand( 1 , 5 ) 

# 500 万行的输入值
x = np.random.rand( 5000000 , 5 )
ログイン後にコピー
## 使用循环
import numpy as np
m = np.random.rand(1,5)
x = np.random.rand(5000000,5)

total = 0
tic = time.process_time()

for i in range(0,5000000):
total = 0
for j in range(0,5):
total = total + x[i][j]*m[0][j] 

zer[i] = total 

toc = time.process_time()
print ("Computation time = "+ str ((toc - tic)) + "seconds" ) 

####计算时间 = 27.02 秒
ログイン後にコピー
## 矢量化
tic = time.process_time() 

#dot product
np.dot(x,mT) 

toc = time.process_time() 
print ( "计算时间 = " + str ((toc - tic)) + "seconds" ) 

####计算时间 = 0.107 秒
ログイン後にコピー
np.dot バックエンドでベクトル化された行列の乗算を実装します。 Python のループと比較して 165 倍高速です。

結論

Python でのベクトル化は非常に高速であり、非常に大規模なデータセットを扱う場合にはループよりも優先されるべきです。

ベクトル化を使用して Python のループを置き換える

# 時間をかけて実装し始めると、コードのベクトル化の観点から考えることに慣れてきます。

以上がベクトル化を使用して Python のループを置き換えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PyCharm の置換ショートカット キーを 5 分でマスターして、プログラミングの速度を簡単に向上させましょう。 PyCharm の置換ショートカット キーを 5 分でマスターして、プログラミングの速度を簡単に向上させましょう。 Feb 22, 2024 am 10:57 AM

PyCharm は、開発者のプログラミング効率の向上に役立つ豊富な機能とショートカット キーを備えた、一般的に使用される Python 統合開発環境です。日々のプログラミング プロセスにおいて、PyCharm のショートカット キー置換スキルを習得すると、開発者がタスクをより迅速に完了できるようになります。この記事では、プログラミング速度を簡単に向上させるために、PyCharm で一般的に使用される置換ショートカット キーをいくつか紹介します。 1.Ctrl+R 置換 PyCharm では、Ctrl+R ショートカット キーを使用して置換操作を実行できます。

PyCharm 初心者ガイド: 置換関数の包括的な分析 PyCharm 初心者ガイド: 置換関数の包括的な分析 Feb 25, 2024 am 11:15 AM

PyCharm は、開発効率を大幅に向上させる豊富な機能とツールを備えた強力な Python 統合開発環境です。その中でも置換機能は開発プロセスで頻繁に使用される機能の 1 つであり、開発者がコードを迅速に修正し、コードの品質を向上させるのに役立ちます。この記事では、初心者がこの関数をよりよく習得して使用できるように、特定のコード例と組み合わせて PyCharm の置換関数を詳細に紹介します。置換関数の概要 PyCharm の置換関数は、開発者がコード内の指定されたテキストを迅速に置換するのに役立ちます

jQueryを使用して要素のクラス名を置換する jQueryを使用して要素のクラス名を置換する Feb 24, 2024 pm 11:03 PM

jQuery は、Web 開発で広く使用されている古典的な JavaScript ライブラリで、イベントの処理、DOM 要素の操作、Web ページ上でのアニメーションの実行などの操作を簡素化します。 jQueryを使っていると要素のクラス名を置き換える場面がよくありますが、この記事ではその実践的な方法と具体的なコード例を紹介します。 1.removeClass() メソッドと addClass() メソッドを使用する jQuery には、削除用の RemoveClass() メソッドが用意されています。

ラムダ式がループから抜け出す ラムダ式がループから抜け出す Feb 20, 2024 am 08:47 AM

ラムダ式がループから抜け出すには、特定のコード例が必要です。プログラミングにおいて、ループ構造は頻繁に使用される重要な構文です。ただし、特定の状況では、現在のループ反復を終了するだけでなく、ループ本体内で特定の条件が満たされたときにループ全体から抜け出したい場合があります。このとき、ラムダ式の特性は、ループから抜け出すという目標を達成するのに役立ちます。ラムダ式は匿名関数を宣言する方法であり、内部的に単純な関数ロジックを定義できます。通常の関数宣言とは異なり、

PyCharm はショートカット キーを置き換えてプログラミングをより便利にします。 PyCharm はショートカット キーを置き換えてプログラミングをより便利にします。 Feb 21, 2024 pm 12:03 PM

PyCharm はプログラマーの間で人気のある統合開発環境で、プログラミングをより効率的かつ便利にするための強力な機能とツールを提供します。 PyCharm では、ショートカット キーの適切な設定と置き換えがプログラミング効率を向上させるための鍵の 1 つです。この記事では、プログラミングをより便利にするために、PyCharmのショートカットキーを置き換える方法を紹介します。 1. ショートカット キーを置き換える必要がある理由 PyCharm では、ショートカット キーはプログラマーがさまざまな操作を迅速に完了し、プログラミング効率を向上させるのに役立ちます。ただし、人それぞれ習慣は異なりますので、人によっては

Python を使用して Excel の単語を置換するにはどうすればよいですか? Python を使用して Excel の単語を置換するにはどうすればよいですか? Sep 16, 2023 pm 10:21 PM

Python では、openpyxl と呼ばれるサードパーティの Python ライブラリを使用して、Excel で 1 つの単語を別の単語に置き換えることができます。 Microsoft Excel は、データの管理と分析に便利なツールです。 Python を使用すると、一部の Excel データ管理タスクを自動化できます。この記事では、Python を使用して Excel の単語を置換する方法を学びます。 Excel の Word を置き換えるために openpyxl をインストールする前に、Python パッケージ マネージャーを使用してシステムに openpyxl ライブラリをインストールする必要があります。 openpyxl をインストールするには、ターミナルまたはコマンド プロンプトに次のコマンドを入力します。ピピンスト

PHPは配列内のすべての値を返して配列を形成します PHPは配列内のすべての値を返して配列を形成します Mar 21, 2024 am 09:06 AM

この記事では、PHP が配列のすべての値を返して配列を形成する方法について詳しく説明します。非常に実用的であると編集者が考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 array_values() 関数の使用 array_values() 関数は、配列内のすべての値の配列を返します。元の配列のキーは保持されません。 $array=[&quot;foo&quot;=&gt;&quot;bar&quot;,&quot;baz&quot;=&gt;&quot;qux&quot;];$values=array_values($array);//$values は [&quot;bar&quot;,&quot;qux&quot;] になりますループを使用すると、配列のすべての値を手動で取得し、新しい値に追加できます。

PyCharm でコードを素早く置き換える方法の秘密を明らかにする PyCharm でコードを素早く置き換える方法の秘密を明らかにする Feb 25, 2024 pm 11:21 PM

PyCharm は開発者に広く愛されている Python 統合開発環境で、コードを迅速に置き換えて開発プロセスをより効率的にするための多くの方法を提供します。この記事では、PyCharm のコードをすばやく置き換えるために一般的に使用されるいくつかの方法を明らかにし、開発者がこれらの機能をより効果的に使用できるようにする具体的なコード例を示します。 1. 置換関数を使用する PyCharm は、開発者がコード内のテキストを迅速に置換できる強力な置換関数を提供します。ショートカット Ctrl+R を使用するか、エディタ内で右クリックして「再」を選択します

See all articles