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

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

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

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

Q&A

解決済

2回答

1922閲覧

pythonにおいて生成したデータの図示の仕方が分かりません。

runatique

総合スコア7

Python

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

0グッド

0クリップ

投稿2018/05/15 10:33

編集2018/05/15 10:37

前提・実現したいこと

pythonのライブラリの1つであるsklearnを用いてデータを作成し、それを図示したいです。
datasets.make_moonsを用いて2クラスのデータを生成し、それを1つの図にする。

発生している問題・エラーメッセージ

plt.plot(y[:,0],y[:,1],'+') IndexError: too many indices for array

該当のソースコード

python

1import tensorflow as tf 2import matplotlib.pyplot as plt 3from sklearn import datasets 4#from sklearn.model_selection import train_test_split 5#from sklearn.utils import shuffle 6 7tf.set_random_seed(0) 8 9N=300 10X,y=datasets.make_moons(N,noise=0.3) 11 12plt.plot(X[:,0],X[:,1],'.') 13plt.plot(y[:,0],y[:,1],'+') 14plt.show()

試したこと

Xだけなら図示できますが、X,y両方を図示しようとするとエラーが出てしまいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

y : array of shape [n_samples]

The integer labels (0 or 1) for class membership of each sample.

sklearn.datasets.make_moons — scikit-learn 0.19.1 documentation

なので、まあ色にでもしてみますか。あと散布図(scatter)を使った方が良いです。

python

1import matplotlib.pyplot as plt 2from sklearn import datasets 3 4N=300 5X,y=datasets.make_moons(N,noise=0.3) 6 7plt.scatter(X[:,0],X[:,1],c=y) 8plt.show()

結果です

投稿2018/05/15 10:44

hayataka2049

総合スコア30933

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

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

runatique

2018/05/15 10:58

ありがとうございます!散布図も後にやろうと思っていたので参考にさせていただきます!
guest

0

ベストアンサー

やりたいことは、こんな感じでしょうか?

Python

1plt.plot(X[y==0, 0],X[y==0, 1], '.') 2plt.plot(X[y==1, 0],X[y==1, 1], '+') 3plt.show()

投稿2018/05/15 10:44

magichan

総合スコア15898

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

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

hayataka2049

2018/05/15 10:46

なるほど、こういうことでしたか(理解が及ばなかった)
runatique

2018/05/15 10:57

ありがとうございます!無事例通りの図が作成できました。 プログラミング初心者なので恥ずかしながらお聞きしたいのですが、この変化([]の中身をこのように書く)は図にどのような影響を与えているのでしょうか。 yというのがプロットに相当するもので、Xはその全体の総称のようなものですか?だからyが二つ必要で==0,1で表されているという感じでしょうか?
hayataka2049

2018/05/15 11:13 編集

magichanさんの代わりに答えてしまいますが、X[y==0, 0]はX[y==0][:,0]と書くのと結果的に等価です(パフォーマンスとかは違う可能性がありますが)。 yは点の属するクラスを0,1で表現するものなので、y==0のものだけ取り出しています。y==0はboolの配列になり、numpy配列のスライスでboolの配列を渡すとTrueのところだけ取り出してくれます。 Xはすべて点の座標です。yで対応するクラスのラベルが示されています。
magichan

2018/05/15 11:13

X に入っているのが各点のポジションデータですので X[0, 0] は 1つ目のデータの x座標 X[0, 1] は 1つ目のデータの y座標 X[1, 0] は 2つ目のデータの x座標 X[1, 1] は 2つ目のデータの y座標 … となります。 次に、y に入っているのが各点のカテゴリデータ(1次元データ)なので y[0] は 1つ目のデータのカテゴリー(0 or 1) y[1] は 2つ目のデータのカテゴリー(0 or 1) … になります。 で、質問のコードやhayataka2049さんのコードにある plot(X[:,0], X[:,1]) は1番目の引数に全てのデータのx座標、2番目の引数に全てのデータのy座標 を渡しておりますので、全てのデータがプロットされます 対して、私の回答の plot(X[y==0,0], X[y==0,1]) は『カテゴリーデータが0であるデータ』を抽出してx座標とy座標を渡す。 と言う意味となります。
magichan

2018/05/15 11:15

おっ、hayataka2049さんが既にコメントを書いてますね。 とりあえず print(X) print(y) print(y==0) print(X[y==0, 0]) などの表示してみると理解が進むかと思います。
runatique

2018/05/16 00:30

ありがとうございます!とても分かりやすく助かります! いろいろ試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問