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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

解決済

1回答

4923閲覧

Y = np.eye(10)[y.astype(int)] の意味すること

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2017/06/23 08:18

numpyとkerasを使ってディープラーニングのモデルを作っているのですが、あまりnumpyに関する知識がないのであまり前に進めずにいます。

困っていることはタイトルのとおりなのですが、こんなコードが有りました。

python

1mnist = datasets.fetch_mldata('MNIST original', data_home='.') 2 3indices = np.random.permutation(range(n))[:N] 4 5X = mnist.data[indices] 6y = mnist.target[indices] 7Y = np.eye(10)[y.astype(int)] # 1-of-K 表現に変換

python

1print(X.shape) 2print(y.shape) 3print(Y.shape) 4print(y) 5print(y.astype(int)) 6 7#(30000, 784) 8#(30000,) 9#(30000, 10) 10#[ 3. 2. 8. ..., 5. 9. 2.] 11#[3 2 8 ..., 5 9 2]

最終行についてです。
numpy.eye(n)はn*nの単位行列を作ることはわかりました。
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.eye.html

y.astype(int)は行列yをint型に型変換しているのもわかりましたs。

しかし
np.eye(10)[y.astype(int)]は一体何をしているのでしょうか。
[]が指す意味がわかりません。配列の場所(?)の指定でしょうか(x[2]のような)

どなたかよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

e=np.eye(10)y2=y.astype(int)といったん別変数に代入してe[y2]と分けて考えると分かりやすいかと思います。
ここで、eは10x10の単位行列で、y2は各0~9の値を持つ30000個のリストです。

まず、e[0]の結果ですが、行列の0行全体の値が返ります。
また、e[]の中には複数の値(行位置)を与えることができ、e[y2]の結果は、y2の各値0~9行目の行を30000行分持つ配列になります。
さらに、e[0,0]は0行0列目の要素を返しますが、e[0,:]e[0]と同じく0行目全体が、e[:,0]は1列目全体が返ります。

…と、分かりにくい説明になってしまいましたね。

以下のページとサンプルコードを見たほうが分かりやすいと思います。

参考:[Python]Numpyの参照、抽出、結合

Python

1import numpy as np 2 3e = np.arange(25).reshape(5,5) # 5x5の行列 4print(e) 5 6print(e[1,2], e[1,2].shape) # 1行2列目の要素 7 8print(e[1,:], e[1,:].shape) # 1行目全体 9print(e[1], e[1].shape) # 上と同じ 10 11print(e[:,4], e[:,4].shape) # 列の指定。4列目全体 12 13y = np.array([0,4]) 14print(e[y], e[y].shape) # 0と4行目全体 15print(e[y,:], e[y,:].shape) # 上と同じ 16 17y = np.array([0,0,1,1,2,2,3,3,4,4]) 18print(e[y], e[y].shape) # 0~4行目を2行ずつ 19print(e[:,y], e[:,y].shape) # 0~4列目を2列ずつ

投稿2017/06/23 09:49

can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問