この記事では、機械学習エンジニアの George Seif が、Python のコレクション モジュールの非常に人気のある 4 つのデータ型とその使用方法について説明します。これらのデータ型はコードを最適化し、より簡潔なタスク実行を実現します。 一般的に言えば、Python のコレクション モジュールは、リスト、辞書、タプル、セットなどのデータ コレクションを格納するためのコンテナーです。これらのコンテナは Python に埋め込まれており、すぐに使用できます。コレクション モジュールは、コードを最適化し、一部のタスクをより簡潔にすることができる追加の高性能データ型を提供します。
この記事は、George Seif (機械学習エンジニア) によって執筆されました。 カウンタ公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.Counter Counter は辞書オブジェクトのサブクラスです。 collections モジュールの Counter() 関数は、リストやタプルなどの反復子を受け取り、Counter 辞書を返します。この辞書のキーはこの反復子内の一意の要素であり、各キーの値は反復子の要素の数です。 まず、コレクション パッケージから Counter をインポートする必要があります。
Counter オブジェクトを作成する場合、他のオブジェクト クラスと同様に、最初にそれを変数に割り当てる必要があります。Counter オブジェクトに渡される唯一の変数は反復子です。
単純な印刷関数 (print(counter)) を使用してこの Counter を印刷すると、辞書に少し似た出力が得られます。
これらのキーを使用して、任意のカウンター項目にアクセスできます。これは、標準の Python 辞書から要素を取得するのとまったく同じです。
これまでのところ、Counter オブジェクトで最も便利な関数は most_common() です。 Counter オブジェクトに適用すると、共通性の降順でソートされた上位 N 個の共通要素とその数を含むリストが返されます。
上記のコードは、次のタプルのリストを出力します。
各タプルの最初の要素はリスト内の唯一の項目であり、2 番目の要素はカウントです。 「リスト内の上位 3 つの共通要素とその数を取得する」などの問題の場合、これは迅速かつ簡単なアプローチになります。 Counter の機能について詳しく知りたい場合は、公式ドキュメントをご覧ください。 デフォルト辞書公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.defaultdict defaultdict は通常の Python 辞書とまったく同じように動作しますが、存在しないキーにアクセスしようとしたときにエラーをスローするのではなく、キーをデフォルト値で初期化する点が異なります。デフォルト値は、defaultdict オブジェクトの作成時に引数として渡されるデータ型に基づいて自動的に設定されます。次のコードは例です。 代わりに、キーをデフォルト値で初期化します。デフォルト値は、defaultdict オブジェクトの作成時に引数として渡されるデータ型に基づいて自動的に設定されます。次のコードは例です。
上記の例では、defaultdict オブジェクトに渡されるデフォルト値は int です。次に、各キーに値が割り当てられるため、「Bob」と「Katie」にはそれぞれ数字が割り当てられます。しかし、最後の行では、まだ定義されていないキー「Sara」にアクセスしようとしています。 通常の辞書では、この操作はエラーになります。しかし、defaultdict を使用すると、int データ型に対応する値 0 を持つ「Sara」の新しいキーが自動的に初期化されます。したがって、最後の行では、「Bob」、「Katie」、「Sara」とそれらに対応する値を出力できます。
リストを使用して defaultdict を初期化すると、つまり names_dict = defaultdict(list) とすると、「Sara」の値は空のリスト [] に初期化され、印刷される内容は次のようになります。
defaultdict の機能について詳しく知りたい場合は、公式ドキュメントを参照してください。 デキュー公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.deque キューは、先入れ先出し (FIFO) の原則に従うコンピューター サイエンスの基本的なデータ構造です。簡単に言えば、キューに最初に追加されたオブジェクトは、最初に削除されるオブジェクトでもある必要があります。キューの先頭にコンテンツを挿入し、後ろからコンテンツを削除することしかできません。途中のコンテンツを操作することはできません。 コレクション ライブラリの deque はこの機能を最適化します。このメソッドの重要な特性は、キューの長さを一定に保つことです。つまり、キューの最大サイズを 10 に設定すると、deque は FIFO 原則に従って要素を追加および削除し、キューの最大サイズを 10 に保ちます。これは Python でキューを使用する最も優れた方法です。 別の例を見てみましょう。まず deque オブジェクトを作成し、それを 1 から 10 までの整数で初期化します。
上記のコードでは、最初に deque を初期化し、その最大長を 10 に指定します。次に、 for ループを介して値をキューに挿入します。通常の Python リストと同じ方法でキューを埋めることに注意してください。最後に、結果を出力します。
キューは maxlen=10 に設定されており、ループ値によって 10 個の要素が追加されるため、キューには 1 から 10 までのすべての数字が含まれます。では、これに数字を追加し続けると何が起こるか見てみましょう。
上記のコードでは、キューに 5 つの要素 (11 から 15 までの数字) を追加しました。しかし、キューには 10 個の要素しか含められないため、いくつかの要素を削除する必要があります。キューは FIFO 原則に従う必要があるため、キューに挿入された最初の 5 つの要素 (挿入順序は [1、2、3、4、5]) が削除されます。印刷された結果は次のとおりです。
deque 機能について詳しく知りたい場合は、公式ドキュメントを参照してください。 名前付きタプル公式ドキュメント: https://docs.python.org/2/library/collections.html#collections.namedtuple Python で通常のタプルを作成すると、その要素はすべて汎用的で名前が付けられません。これにより、各タプル要素の正確なインデックスを覚えておく必要があります。 namedtuple はこの問題を解決できます。 namedtuple() は、タプル内の各位置に固定の名前があり、namedtuple オブジェクトにも共通の名前があるタプルを返します。 namedtuple を使用するには、まずそのためのテンプレートを作成する必要があります。次のコードは、属性「name」、「age」、および「job」を持つ「Person」という namedtuple テンプレートを作成します。
上記のコードは理解しやすいです。namedtuple の「Person」テンプレートを初期化し、そのすべての属性を初期化します。上記のコードの最終的な印刷結果は次のとおりです。
したがって、namedtuples を使用すると、タプルの使用がより簡単、読みやすく、整理されたものになります。 namedtuple 関数について詳しく知りたい場合は、公式ドキュメントを参照してください。 |
<<: ビッグデータアーキテクチャの詳細解説:データ取得からディープラーニングまで
>>: 90年代以降の世代は、分野を超えてNLPを独学で学び、オープンソースライブラリHanLPを作成しました。このライブラリはGitHubで15,000個のスターを獲得しています。
[[340407]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...
今日、企業組織は意思決定に人工知能や機械学習モデルをますます頼りにしており、こうした意思決定は私たち...
RPA(ロボティック・プロセス・オートメーション)業界のリーダーであるオートメーション・エニウェアは...
[[422760]] [51CTO.com クイック翻訳]事実によれば、ロボティック プロセス オー...
質問に答えたり、翻訳したり、記事を書いたり、コードを書いたり、数式を計算したり、アイコンを描いたりす...
研究により、印刷されたステッカーだけで AI システムを「騙す」ことができ、検出システムが目の前にい...
50 年前の kNN アルゴリズムは、わずか 14 行のコードで、BERT などの人気の Trans...
機械学習において、異常検出と処理は比較的小さな分野、または機械学習の副産物です。一般的な予測問題では...
[51CTO.comより引用] 2018年5月18日〜19日、51CTO主催のグローバルソフトウェア...
ロボットは科学者の主な研究分野となっており、この分野の技術が進歩し続けると、ロボットがこの社会の主な...