ホームページ >バックエンド開発 >Python チュートリアル >NumPy は列の一意の値に基づいてデータを効率的にグループ化できますか?

NumPy は列の一意の値に基づいてデータを効率的にグループ化できますか?

DDD
DDDオリジナル
2024-12-05 09:32:10749ブラウズ

Can NumPy Group Data Efficiently Based on a Column's Unique Values?

NumPy は指定された列によってデータをグループ化できますか?

概要:

データのグループ化は多くのデータ分析シナリオにおいて重要な操作です。 Python の強力な数値ライブラリである NumPy は、配列を操作するためのさまざまな関数を提供しますが、専用のグループ化関数がありません。この記事では、専用関数を明示的に使用せずに NumPy でグループ化を実現する方法を説明します。

質問:

NumPy には配列をその配列によってグループ化する関数はありますか?提供された配列に示されている最初の列?

array([[ 1, 275],
       [ 1, 441],
       [ 1, 494],
       [ 1, 593],
       [ 2, 679],
       [ 2, 533],
       [ 2, 686],
       [ 3, 559],
       [ 3, 219],
       [ 3, 455],
       [ 4, 605],
       [ 4, 468],
       [ 4, 692],
       [ 4, 613]])

Expected出力:

array([[[275, 441, 494, 593]],
       [[679, 533, 686]],
       [[559, 219, 455]],
       [[605, 468, 692, 613]]], dtype=object)

答え:

NumPy は明示的に「グループ化」関数を提供しませんが、Eelco Hoogendoorn の手法にヒントを得た代替アプローチを提供します。図書館。このアプローチは、配列の最初の列が常に増加しているという前提に基づいています。そうでない場合は、

a = a[a[:, 0].argsort()]

を使用して最初の列で配列を並べ替える必要があります。最初の列の値が増加するという仮定を使用して、次のコードはグループ化操作を実行します。

np.split(a[:, 1], np.unique(a[:, 0], return_index=True)[1][1:])

このコードは、最初の列の一意の値に基づいて、配列要素を部分配列に効果的にグループ化します。各部分配列は、最初の列の値が同じであるすべての要素の 2 番目の列の値を含むグループを表します。

追加の考慮事項:

  • このメソッドの複雑さは O です。ソート操作による (n log(n))。
  • 結果リストは NumPy 配列となり、後続の NumPy 操作には変換操作が必要です。
  • パフォーマンスの比較: このメソッドは、小規模なデータセットの場合、Pandas やdefaultdicts などの他のグループ化アプローチよりも高速であることが経験的に示されています。

したがって、NumPy は、配列操作と並べ替えを利用してデータをグループ化する柔軟かつ効率的な方法を提供します。専用のグループ化関数がなくても機能します。

以上がNumPy は列の一意の値に基づいてデータを効率的にグループ化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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