list_a = [1,1,1,2,2,2,2,3,4,5,1]
といったリストがあるとします
この中から1が連続している個所を抽出したい場合です。
「Python コード 備忘録 numpy2 比較」
で記述したのnp.whereの機能を使います
■numpy arrayに格納します
>> list_a = [1,1,1,2,2,2,2,3,4,5,1]
>> np.array(list_a)
array([1, 1, 1, 2, 2, 2, 2, 3, 4, 5, 1])
■listの中から 値が1の場所を検索
indexが取れます
>> np.where(np_a == 1)
(array([ 0, 1, 2, 10], dtype=int32),)
■indexを保持しておきます
np_index = np.where(np_a == 1)[0]
■np_indexの長さの連番の行列を作成します
>> np.array(range(len(np_index)))
np_renban = array([0, 1, 2, 3])
■np_indexの元は Listのindexになので、連番のListを引くと 連続している個所は同じ値になります。
>> np_index – np_renban
array([0, 0, 0, 7])
for文を使わずに書けるってすばらしい!
(速度は比較していませんが。。。)