質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

735閲覧

書籍での学習中に出現したコードが理解できない

Majespy

総合スコア22

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/24 16:46

編集2018/11/24 19:11

質問

ナイーブベイズクラス分類器を学習中に出現したソースコードです。

X[y==label]の[]内がどのような判定をされ動作しているか、理解できません。

該当のソースコード

Python

1X = np.array([[0, 1, 0, 1], 2 [1, 0, 1, 1], 3 [0, 0, 0, 1], 4 [1, 0, 1, 0]]) 5y = np.array([0, 1, 0, 1]) 6 7counts = {} 8for label in np.unique(y): 9 counts[label] = X[y==label].sum(axis=0) 10print("Feature counts:\n{}".format(counts))

実行結果

Python

1Feature counts: 2{0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2018/11/24 16:50

label の定義も質問欄のコードに追加してください
Majespy

2018/11/24 19:07

コメント行で「クラスに対してループ。それぞれの特徴量ごとに非ゼロの数を(加算で)数える」と書いてあるのみです。
guest

回答2

0

numpy の boolean index と呼ばれるものですね。

python

1X = np.array([1,2,3,4]) 2mask = np.array([True, False, True, False]) 3 4print(X[mask]) # 結果: 1, 3

のように bool 配列を使って元の配列一部をピックアップした配列を作っています。

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html
ここのページの Boolean or “mask” index arrays の項目に書かれているので読んでみてください。

※ 補足
y==label の部分については、ndarray との比較では各要素と比較された配列として結果が戻ってくるので、label と y の比較結果の bool 配列が得られています。

投稿2018/11/24 20:26

編集2018/11/24 20:52
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Majespy

2018/11/25 14:35

ご回答ありがとうございます。 boolean indexと呼ばれるものがあるのですね、勉強になりました。
guest

0

ベストアンサー

Xとyが何を意味しているのかわからないので、答えの見つけ方を記します。

<基本的な考え方>
一行ずつ実行し、処理結果を確認する。関数Aの引数に関数Bが含まれるような場合は、関数Bの処理結果を確認した上で関数Aの処理結果を確認する

<今回のポイント>
X[y==label]の挙動が知りたいということなので、labelの中身(意味内容はわかりませんが、コードによると0,1)を順番に入れ替えて実行するとわかる。
比較演算なので、y==0(あるいは1)の戻り値はTrueかFalse。このTrueやFalseが何を意味しているかはlabelの中身によるので、その辺りと絡めて理解するしかない

投稿2018/11/24 19:44

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問