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

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

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

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

Python

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

Q&A

解決済

1回答

5662閲覧

numpyでIndexError: index 3 is out of bounds for axis 1 with size 2

yep

総合スコア45

NumPy

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

Python

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

0グッド

0クリップ

投稿2018/10/26 03:42

x_haiku[0,char_indices[char]] = 1.で
IndexError: index 3 is out of bounds for axis 1 with size 2
と出ました。
これは、numpyで要素の範囲外を示すエラーで、
今回の場合、行列の要素3が、1から2までにない。ということを示しているはずなのですが、周辺の数字を変えても直せません。
Numpyで行列の範囲外を切り抜くとどうなるか

poem.txtは、

朝霧 の 中 に 九段 の ともし 哉 あたたか な 雨 が 降る なり 枯葎 菜の花 や は つと 明るき 町 は づれ 秋風 や 伊予 へ 流る る 汐 の 音 長閑 さ や 障子 の 穴 に 海 見え て

python

1import numpy as np 2import codecs 3from keras.layers import Activation, Dense, Input 4from keras.models import Model 5import sys 6 7#データの読み込み 8with open(r'/home/hoge/Desktop/data/haiku.txt', encoding='utf-8') as f: 9 poems = f.readlines() 10 for p in poems: 11 s = p.rstrip() # 改行を除去 12 s = s.split(' ') 13 14# 文字をID変換 15char_indices = dict((c, i) for i, c in enumerate(chars)) 16# IDから文字へ変換 17indices_char = dict((i, c) for i, c in enumerate(chars)) 18#テキストを2文字ずつ読み込む 19maxlen = 2 20#サンプルバッチ数 21step = 2 22sentences = [] 23for i in range(0, len(poems) - maxlen, step): 24 sentences.append(poems[i: i + maxlen]) 25 26#ベクトル化する 27x = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool) 28for i, sentence in enumerate(sentences): 29 for t, char in enumerate(sentence): 30 x[i, t, char_indices[char]] = 10 31 32#encoderの次元 33encoding_dim = 128 34#入力用の変数 35input_word = Input(shape=(maxlen, len(chars))) 36#入力された語がencodeされたものを格納する 37encoded = Dense(128, activation='relu')(input_word) 38encoded = Dense(64, activation='relu')(encoded) 39encoded = Dense(32, activation='relu')(encoded) 40latent = Dense(8, activation='relu')(encoded) 41#encodeされたデータを再構成 42decoded = Dense(32, activation='relu')(latent) 43decoded = Dense(64, activation='relu')(decoded) 44decoded = Dense(39065, activation='relu')(encoded) 45autoencoder = Model(inputs=input_word, outputs=decoded) 46# #Adamで最適化、loss関数をcategorical_crossentropy 47autoencoder.compile(optimizer='Adam', loss='categorical_crossentropy') 48#アレイサイズの確認 49print(x.shape) 50 51autoencoder.fit(x, x, 52 epochs=50, 53 batch_size=3, 54 shuffle=False) 55 56for i in range(17): 57 x_haiku = np.zeros((1, maxlen, len(chars))) 58 for t, char in enumerate(sentence): 59 x_haiku[0,char_indices[char]] = 1. 60 sentence = sentence[:-1] 61print(char)

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

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

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

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

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

guest

回答1

0

ベストアンサー

x_haiku = np.zeros((1, maxlen, len(chars)))

maxlen = 2 なので、x_haiku の axis=1 で index=3 にアクセスしようとした場合、エラーになります。

投稿2018/10/26 03:59

tiitoi

総合スコア21956

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

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

yep

2018/10/26 04:32

maxlen = 4にすると秋風 や 伊予 へ 流る る 汐 の 音という文章がそのまま出てきました。
yep

2018/10/26 04:35

maxlen = 3は、IndexError: index 3 is out of bounds for axis 1 with size 3 になり、maxlen = 5は、AttributeError: 'ProgbarLogger' object has no attribute 'log_values'となります。
tiitoi

2018/10/26 04:50

IndexError の原因は判明したと思いますが、質問はなんでしょうか。
yep

2018/10/26 04:53

このmaxlenを私はデータを何文字ずつ読み込むというつもりで書いたのですが、これは、私の考えとは違う挙動をしているということでしょうか?
tiitoi

2018/10/26 04:57 編集

まず x_haiku = np.zeros((1, maxlen, len(chars))) がどのような情報を格納するために用意した配列なのでしょうか? 3次元配列なのに、x_haiku[0, char_indices[char]] = 1. とアクセスしてるのは、意図どおりなのでしょうか?
yep

2018/10/26 05:11

調べてみると、 for i in range(17): x_haiku = np.zeros((1, maxlen, len(chars))) for t, char in enumerate(sentence): x_haiku[0,char_indices[char]] = 1. sentence = sentence[:-1] 自体が意味がないようです。 また、x_haiku[0, char_indices[char]] = 1.は、頑張って書いてみましたが、これも意味がないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問