長さの異なる numpy 配列のリストがあり、そのうちのいくつかは次のように繰り返されます。
import numpy as np
multi = [np.array([1, 2, 3]),
np.array([1, 2]),
np.array([1, 2, 3, 4]),
np.array([1, 2, 3]),
np.array([1, 2])]
このリストから、一意の配列の数が必要です (シーケンスのヒストグラムなど)。
numpy 配列はハッシュ可能ではないため、配列を文字列表現に変換し、それをこのメソッドitertools.groupby
と同様のグループ化のキーとして使用することでこれを行っています。
import itertools
sorted_strings = sorted([str(p) for p in multi])
groups = [(k, len(list(g))) for k, g in itertools.groupby(sorted_strings)]
print(groups)
この出力は次のとおりです。
[('[1 2 3 4]', 1), ('[1 2 3]', 2), ('[1 2]', 2)]
これは正しいですが、より洗練された解決策があるかどうか、または配列のリストよりもこのデータを格納するためのより良い方法があるかどうか疑問に思っています。