リスト/ numpy配列のPythonバランシングアイテム

小さい

トークンの配列があり、各トークンはからまでの異なるクラスに対応し1ていnます。各クラスに同じ数のトークンが存在するように配列/リストのバランスとる必要がありtokensます。の要素を削除してこれを実行したいと思いますtokens

以下の例では、トークンの数が最も少ないクラスは、トークンclass 2のみを持つクラス2です。したがって、他のクラスの要素もカウントがになるまで削除したいと思い2ます。

例えば

tokens  = array(['a','b','c','d','e','f','g','h','l'])

classes = array([ 1 , 1 , 1 , 1 , 2 , 2 , 3 , 3 , 3])

この例では、クラスは(タスクを明確にするために)昇順でリストされていますが、実際には、クラスは特定の順序ではありません。

例えば

sol = array(['c','d','e','f','g','h'])

または

sol = array(['a','b','e','f','g','h'])

明らかに、過剰なクラスで削除する要素を選択できるため、さまざまなソリューションを使用できます(上記のように)。私が取ることができます機能必要tokensclassesし、出力aをsol

jdehesa

これがNumPyでそれを行う方法です。これにより、常に各クラスの最初の外観が選択されます。

import numpy as np

def balance(tokens, classes):
    # Count appearances of each class
    c = np.bincount(classes - 1)
    n = c.min()
    # Accumulated counts for each class shifted one position
    cs = np.roll(np.cumsum(c), 1)
    cs[0] = 0
    # Compute appearance index for each class
    i = np.arange(len(classes)) - cs[classes - 1]
    # Mask excessive appearances
    m = i < n
    # Return corresponding tokens
    return tokens[m]

tokens  = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'l'])
classes = np.array([  1,   1,   1,   1,   2,   2,   3,   3,   3])
print(balance(tokens, classes))
# ['a' 'b' 'e' 'f' 'g' 'h']

現状では、一部のクラスが完全に欠落している場合(出現の最小数がゼロであるため、ソリューションにクラスが表示されないため)、関数は空の配列を返しますが、必要に応じてそれを適応させることができます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

高度なスライシング:PythonリストとNumpy配列

python:1D配列のnumpy配列スライシング

配列アイテムのElasticsearchアグリゲーション

リストナンバリングスタイルCSS、アラビア数字システムのような正しいナンバリング

Numpy配列アイテムの順序-シーケンスの均等な分散

ランダムドットステレオグラムのアンチエイリアシング

mongodbアグリゲーションの別の配列のアイテムから配列アイテムをフィルタリングする

クロスプラットフォームのxamarinアプリケーションとネイティブライブラリバインディング

numpy配列の特定のアイテムをデクリメントしてストレッチする方法は?

CustomAdapterの異なるグラデーションリストアイテム

NumPyスライシング:1つの配列エントリを除くすべて

Numpy:セグメンテーションタイプが異なる2番目の配列とのオーバーラップの量に基づいて配列内のセグメントをフィルタリングします

配列と配列名のCプログラムアドレスインクリメント

リストアイテムに配列を追加します(1つは1つのペアリングです)

v-forループでのクラスバインディングの配列アイテムへのアクセス

Pythonを使用して、リスト内のアイテムをランダムにペアリングします

コンテキストアクションバーのスタイリング?

RxJSを使用してアイテムのストリームを操作し、ストリーミングされたアイテムの配列を取得します

動的Python配列スライシング

配列アイテムのシーケンシャルリストをゼロに設定する最速の方法

プラグインシステム:ホストアプリケーションとプラグイン間のイベントを処理する方法

パスファインディングPythonアルゴリズムのバックトラッキング

配列アイテムを使用したリストのフィルタリング

一意の配列アイテムを選択リストにフィルタリングする

dom-repeatテンプレートがエラー「アイテムの予想される配列」で配列のレンダリングに失敗する

マテリアルデザインライト。グリッドシステムの予期しない動作

配列リスト内のアイテムの順序をランダムに変更します

numpyのインデックスのリストを指定した配列からアイテムのリストを返す方法

リスト<>ショッピングバスケットにアイテムの重複を表示するc#

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ