1. ホーム
  2. python

[解決済み] numpyの配列でモードを見つける最も効率的な方法

2022-03-13 01:34:33

質問

正負の整数を含む2次元配列があります。各行が特定の空間サイトの経時的な値を表し、各列は与えられた時間における様々な空間サイトの値を表している。

というような配列の場合。

1 3 4 2 2 7
5 2 2 1 4 1
3 3 2 2 1 1

結果は次のようになります。

1 3 2 2 2 1

なお、modeに複数の値がある場合は、任意の1つ(ランダムに選択)をmodeとして設定することができる。

しかし、numpyにはそれを行うための関数が組み込まれているのではないかと期待しています。または、ループせずに効率的にそれを見つけるためのトリックがある場合。

どのように解決するのですか?

確認 scipy.stats.mode() (@tom10 さんのコメントに触発されて)。

import numpy as np
from scipy import stats

a = np.array([[1, 3, 4, 2, 2, 7],
              [5, 2, 2, 1, 4, 1],
              [3, 3, 2, 2, 1, 1]])

m = stats.mode(a)
print(m)

出力します。

ModeResult(mode=array([[1, 3, 2, 2, 1, 1]]), count=array([[1, 2, 2, 2, 1, 2]]))

見ての通り、モードとカウントの両方が返されます。モードを直接選択するには m[0] :

print(m[0])

出力します。

[[1 3 2 2 1 1]]