4つの高性能なデータ型、Pythonコレクションはコードの最適化とタスクの簡素化に役立ちます

4つの高性能なデータ型、Pythonコレクションはコードの最適化とタスクの簡素化に役立ちます

この記事では、機械学習エンジニアの George Seif が、Python のコレクション モジュールの非常に人気のある 4 つのデータ型とその使用方法について説明します。これらのデータ型はコードを最適化し、より簡潔なタスク実行を実現します。
Python の最大の利点の 1 つは、利用できるモジュールとパッケージの種類が豊富なことです。これらのモジュールとパッケージは、機械学習、データ サイエンス、Web 開発、フロントエンド開発など、多くの一般的な分野に Python の機能を拡張します。最もパフォーマンスが優れているものの 1 つは、Python の組み込みコレクション モジュールです。

一般的に言えば、Python のコレクション モジュールは、リスト、辞書、タプル、セットなどのデータ コレクションを格納するためのコンテナーです。これらのコンテナは Python に埋め込まれており、すぐに使用できます。コレクション モジュールは、コードを最適化し、一部のタスクをより簡潔にすることができる追加の高性能データ型を提供します。

[[281234]]

この記事は、George Seif (機械学習エンジニア) によって執筆されました。

カウンタ

公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.Counter

Counter は辞書オブジェクトのサブクラスです。 collections モジュールの Counter() 関数は、リストやタプルなどの反復子を受け取り、Counter 辞書を返します。この辞書のキーはこの反復子内の一意の要素であり、各キーの値は反復子の要素の数です。

まず、コレクション パッケージから Counter をインポートする必要があります。

  1. コレクションからカウンターをインポート

Counter オブジェクトを作成する場合、他のオブジェクト クラスと同様に、最初にそれを変数に割り当てる必要があります。Counter オブジェクトに渡される唯一の変数は反復子です。

  1. 1st = [ 1 , 2 , 3 , 3 , 2 , 1 , 1 , 1 , 2 , 2 , 3 , 1 , 2 , 1 , 1 ]
  2.  
  3. カウンター = カウンター(lst)

単純な印刷関数 (print(counter)) を使用してこの Counter を印刷すると、辞書に少し似た出力が得られます。

  1. カウンター( { 1 : 7,2 : 5,3 : 3 } )

これらのキーを使用して、任意のカウンター項目にアクセスできます。これは、標準の Python 辞書から要素を取得するのとまったく同じです。

  1. 1st = [ 1 , 2 , 3 , 3 , 2 , 1 , 1 , 1 , 2 , 2 , 3 , 1 , 2 , 1 , 1 ]
  2.  
  3. カウンター = カウンター(lst)
  4.  
  5. print(カウンタ[ 1 ])
  6.  
  7. most_common() 関数

これまでのところ、Counter オブジェクトで最も便利な関数は most_common() です。 Counter オブジェクトに適用すると、共通性の降順でソートされた上位 N 個の共通要素とその数を含むリストが返されます。

  1. 1st = [ 1 , 2 , 3 , 3 , 2 , 1 , 1 , 1 , 2 , 2 , 3 , 1 , 2 , 1 , 1 ]
  2.  
  3. カウンター = カウンター(lst)
  4.  
  5. 印刷(counter.most_common( 2 ))

上記のコードは、次のタプルのリストを出力します。

  1. [( 1 , 7 ), ( 2 , 5 )]

各タプルの最初の要素はリスト内の唯一の項目であり、2 番目の要素はカウントです。 「リスト内の上位 3 つの共通要素とその数を取得する」などの問題の場合、これは迅速かつ簡単なアプローチになります。

Counter の機能について詳しく知りたい場合は、公式ドキュメントをご覧ください。

デフォルト辞書

公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.defaultdict

defaultdict は通常の Python 辞書とまったく同じように動作しますが、存在しないキーにアクセスしようとしたときにエラーをスローするのではなく、キーをデフォルト値で初期化する点が異なります。デフォルト値は、defaultdict オブジェクトの作成時に引数として渡されるデータ型に基づいて自動的に設定されます。次のコードは例です。

代わりに、キーをデフォルト値で初期化します。デフォルト値は、defaultdict オブジェクトの作成時に引数として渡されるデータ型に基づいて自動的に設定されます。次のコードは例です。

  1. コレクションからdefaultdictをインポート
  2.  
  3. names_dict = デフォルト辞書( int )
  4.  
  5. names_dict[ "ボブ" ] = 1  
  6.  
  7. names_dict[ "ケイティ" ] = 2  
  8.  
  9. sara_number = names_dict[ "サラ" ]
  10.  
  11. 印刷(names_dict)

上記の例では、defaultdict オブジェクトに渡されるデフォルト値は int です。次に、各キーに値が割り当てられるため、「Bob」と「Katie」にはそれぞれ数字が割り当てられます。しかし、最後の行では、まだ定義されていないキー「Sara」にアクセスしようとしています。

通常の辞書では、この操作はエラーになります。しかし、defaultdict を使用すると、int データ型に対応する値 0 を持つ「Sara」の新しいキーが自動的に初期化されます。したがって、最後の行では、「Bob」、「Katie」、「Sara」とそれらに対応する値を出力できます。

  1. defaultdict(<クラス  'int' >, { 'ボブ' : 1 'ケイティ' : 2 'サラ' : 0 })

リストを使用して defaultdict を初期化すると、つまり names_dict = defaultdict(list) とすると、「Sara」の値は空のリスト [] に初期化され、印刷される内容は次のようになります。

  1. defaultdict(<クラス  'int' >, { 'ボブ' : 1 , 'ケイティ' : 2 , 'サラ' : []})

defaultdict の機能について詳しく知りたい場合は、公式ドキュメントを参照してください。

デキュー

公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.deque

キューは、先入れ先出し (FIFO) の原則に従うコンピューター サイエンスの基本的なデータ構造です。簡単に言えば、キュ​​ーに最初に追加されたオブジェクトは、最初に削除されるオブジェクトでもある必要があります。キューの先頭にコンテンツを挿入し、後ろからコンテンツを削除することしかできません。途中のコンテンツを操作することはできません。

コレクション ライブラリの deque はこの機能を最適化します。このメソッドの重要な特性は、キューの長さを一定に保つことです。つまり、キューの最大サイズを 10 に設定すると、deque は FIFO 原則に従って要素を追加および削除し、キューの最大サイズを 10 に保ちます。これは Python でキューを使用する最も優れた方法です。

別の例を見てみましょう。まず deque オブジェクトを作成し、それを 1 から 10 までの整数で初期化します。

  1. コレクションからdequeをインポート
  2.  
  3. my_queue = deque(最大長= 10 )
  4.  
  5. iが範囲( 10 )内にある場合:
  6.  
  7. my_queue.append(i + 1 )を実行します。
  8.  
  9. 印刷(my_queue)

上記のコードでは、最初に deque を初期化し、その最大長を 10 に指定します。次に、 for ループを介して値をキューに挿入します。通常の Python リストと同じ方法でキューを埋めることに注意してください。最後に、結果を出力します。

  1. deque([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ], 最大長 = 10 )

キューは maxlen=10 に設定されており、ループ値によって 10 個の要素が追加されるため、キューには 1 から 10 までのすべての数字が含まれます。では、これに数字を追加し続けると何が起こるか見てみましょう。

  1. i範囲( 10,15 )内である場合:
  2.  
  3. my_queue.append(i + 1 )を実行します。
  4.  
  5. 印刷(my_queue)

上記のコードでは、キューに 5 つの要素 (11 から 15 までの数字) を追加しました。しかし、キューには 10 個の要素しか含められないため、いくつかの要素を削除する必要があります。キューは FIFO 原則に従う必要があるため、キューに挿入された最初の 5 つの要素 (挿入順序は [1、2、3、4、5]) が削除されます。印刷された結果は次のとおりです。

  1. deque([ 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ], 最大長 = 10 )

deque 機能について詳しく知りたい場合は、公式ドキュメントを参照してください。

名前付きタプル

公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.namedtuple

Python で通常のタプルを作成すると、その要素はすべて汎用的で名前が付けられません。これにより、各タプル要素の正確なインデックスを覚えておく必要があります。 namedtuple はこの問題を解決できます。

namedtuple() は、タプル内の各位置に固定の名前があり、namedtuple オブジェクトにも共通の名前があるタプルを返します。 namedtuple を使用するには、まずそのためのテンプレートを作成する必要があります。次のコードは、属性「name」、「age」、および「job」を持つ「Person」という namedtuple テンプレートを作成します。

  1. コレクションからnamedtupleをインポートする
  2.  
  3. Person = namedtuple( 'Person' , '名前 年齢 職業' )
  4.  
  5. テンプレートが作成されると、それを使用してnamedtupleオブジェクトを作成できます。2のnamedtupleを作成しましょ  2 人の人物とその代表を印刷します。
  6.  
  7. Person = namedtuple( 'Person' , '名前 年齢 職業' )
  8.  
  9. Mike = 人(名前= 'Mike' 、年齢= 30 、職業= 'データ サイエンティスト' )
  10.  
  11. ケイト = Person(名前= "ケイト" 、年齢= 28 、職業= 'プロジェクトマネージャー' )
  12.  
  13. 印刷(マイク)
  14.  
  15. プリント(ケイト)

上記のコードは理解しやすいです。namedtuple の「Person」テンプレートを初期化し、そのすべての属性を初期化します。上記のコードの最終的な印刷結果は次のとおりです。

  1. 人(名前= 'マイク' 、年齢= 30 、職業= 'データサイエンティスト' )
  2.  
  3. 人(名前= 'ケイト' 、年齢= 28 、職業= 'プロジェクトマネージャー' )

したがって、namedtuples を使用すると、タプルの使用がより簡単、読みやすく、整理されたものになります。

namedtuple 関数について詳しく知りたい場合は、公式ドキュメントを参照してください。

<<:  ビッグデータアーキテクチャの詳細解説:データ取得からディープラーニングまで

>>:  90年代以降の世代は、分野を超えてNLPを独学で学び、オープンソースライブラリHanLPを作成しました。このライブラリはGitHubで15,000個のスターを獲得しています。

ブログ    

推薦する

アリババのダブル11は記録破りであるだけでなく、AIショーでもある

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

AIファースト戦略はどこから始まるのでしょうか?

[[393200]] [51CTO.com クイック翻訳]人工知能は企業に競争上の優位性をもたらし...

SSDの寿命は短いですか?寿命を延ばすバランスアルゴリズム

ハードウェアによって掘られた穴は、本当にソフトウェアによって埋められるのでしょうか?実際、多くのハー...

人工知能の研究内容:自然言語処理と知的情報検索技術

自然言語処理は、人工知能技術を実際の分野に応用した典型的な例です。コンピュータ システムが人間のよう...

Matplotlib の使用が難しいと感じるのはなぜですか?このマインドマップをまだ見ていないので

序文Matplotlib は、データの視覚化を簡単に作成できる人気の Python ライブラリです。...

AIによる顔変えが流行っているが、Alipayはまだ安全か?公式回答

最近、AI技術を使ってアテナ・チュウ演じる黄容の顔を楊冪の顔に置き換える動画が話題になった。ネットユ...

知らないうちにAIを構築しているかもしれない

[[189866]]私たちは皆、検証コードに精通しています。reCAPTCHA は、人間と機械を区別...

AI データモデリングはどのようにして気候災害を防ぐことができるのでしょうか?

予測分析モデルが改良されるにつれ、この分野のイノベーターたちは、これまで断片化されていて使用コストが...

OpenAIはChatGPTを軍事目的で使用する予定か?国防総省との協力禁止が解除、元グーグルCEO「AIは核爆弾になる」

AIの兵器化?大規模言語モデルの誕生以来、人々はその潜在的な影響について議論し続けています。しかし...

人工知能の65年の簡単な歴史:マッカーシーからヒントンまで、人類はどのようなAIを追求しているのでしょうか?

人工知能の発展は65年の歴史があり、厳しい冬も栄光も経験してきました。シンボリックエキスパートシステ...

...

OpenAIの科学者による最新の大規模言語モデルのスピーチが話題となり、LLMの成功の鍵が明らかになった。

最近、OpenAIの研究科学者ヒョン・ウォン・チョン氏がソウル国立大学で「大規模言語モデル(2023...

AI技術年次報告:中国の2つの側面におけるパフォーマンスは注目に値する

スタンフォード大学は最近、「人工知能指数(2018年グローバルAIレポート)」を発表しました。これは...

Yann LeCun 氏は衝撃的な発言をしました。「ディープラーニングは死んだ、微分可能プログラミング万歳!」

ディープラーニングの分野で最も有名な学者の一人であるヤン・ルカン氏が本日、自身のFacebookに投...

相関関係は因果関係ではない。ディープラーニングによりAIは「10万のなぜ」を問うことができる

[[274938]]ビッグデータダイジェスト制作出典: searchenterpriseai編纂者:...