2次元のNumpyの行列で、行と列に1個ずつしか1が存在しないかどうか確かめるサンプルコード

あんまり大した話じゃないんですけど(大したことを書いたことがないですが(^_^;))

次のような、2次元のNumpyの配列(ndarray)があった時に

pieces = np.array([
        [1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]
        ])

行、列のどちらにも一個しか1が存在しないのが正しい状態で、2個以上の場合は、エラーを出す、という必要がありました。

import numpy as np

pieces = np.array([
        [1, 0, 0],
        [0, 1, 0],
        [0, 0, 1]
        ])

list1 = np.count_nonzero(pieces, axis=0)
print(list1)

list2 = np.count_nonzero(pieces, axis=1)
print(list2)

morethan_one_column = [i for i in list1 if i > 1 ]
print(morethan_one_column)

if morethan_one_column:
        print("あかーん")

morethan_one_row = [i for i in list2 if i > 1 ]
print(morethan_one_row)

if morethan_one_row:
        print("あかーん")

one hotなどで、行の方向に1個だけしか存在してほしくない、という状況はえてしてあると思います。

私の場合は、列の方向にも1個だけしか存在してほしくない、という状況ですけど、行の場合だけなら上記の

np.count_nonzero(pieces, axis=1)

だけでコト足りてます。

axisという引数は、軸ですが、軸の数え方、いつも間違いそうになりますけど、この2次元配列の場合、縦に並んでいるのが0軸です!!

下記にも count_nonzero は紹介してまして、実際のところ、下記の記事みてやり方思い出したって次第です。


NumPy 0じゃない要素をカウントする

Python

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です