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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

29368閲覧

Pythonでエラー: too many indices for array の解決方法を教えてください!

ysk.Lab

総合スコア20

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/13 07:40

編集2019/07/13 10:24

anaconda3、jupyternotebookで実装

ソースコード

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import csv from __future__ import print_function from keras.layers.core import Activation from keras.layers.core import Dense from keras.layers.core import Dropout from keras.models import Sequential from keras.utils import np_utils from keras.utils import plot_model from keras.layers.recurrent import LSTM from keras.callbacks import EarlyStopping from keras.initializers import glorot_uniform from keras.initializers import orthogonal from keras.initializers import TruncatedNormal # 学習データ df1 = csv.reader(open('x-data.csv', 'r')) data1 = [ v for v in df1] mat = np.array(data1) mat2 = mat[1:] # 見出し行を外す x_data = mat2[:, 1:].astype(np.float) # 2列目以降を抜き出してfloat変換 print('x_data.shape=', x_data.shape) # ラベルデータ # 1%以上/0%以上/-1%以上/-1%未満 df2 = csv.reader(open('t-data.csv', 'r')) data2 = [ v for v in df2] mat3 = np.array(data2) mat4 = mat3[1:] # 見出し行を外す t_data = mat4[:, 1:].astype(np.float) # 2列目以降を抜き出してfloat変換 print('t_data.shape=', t_data.shape)

##エラー箇所

ここでfloat変換にしよとした所

t_data = mat4[:, 1:].astype(np.float) # 2列目以降を抜き出してfloat変換
IndexError Traceback (most recent call last) <ipython-input-47-b6ba00859e68> in <module> ----> 1 t_data = mat4[:, 1:].astype(np.float)# 2列目以降を抜き出してfloat変換 IndexError: too many indices for array

学習データx-data.csv 、ラベルデータt-data.csvは見出し行、日付列を外して、データを行列に展開。
学習データは(n-2,1)次行列、ラベルデータは(n-2,4)次行列   です。

##x-data.csv(開いたデータの中身)

Date,Data 1965/1/5, 1965/1/6,-0.497284146 1965/1/7,-0.810010493 1965/1/8,-0.949750073 1965/1/12,-0.16388427 1965/1/13,0.534587535 1965/1/14,-0.609059694 1965/1/18,1.391564293 1965/1/19,0.105434899 1965/1/20,0.114992886 1965/1/21,-0.124438336 1965/1/22,0.681599556 1965/1/25,0.964351034 1965/1/26,0.133713051 1965/1/27,-0.810767248 1965/1/28,0.878904551 1965/1/29,0.396063218 1965/2/1,-0.045063459 1965/2/2,0.328819522 1965/2/3,-0.746352469 . . .

##t-data.csv(開いたデータの中身)

Date,1%以上,0%以上,-1%以上,-1%未満 1965/1/5,,,, 1965/1/6,0,0,1,0 1965/1/7,0,0,1,0 1965/1/8,0,0,1,0 1965/1/12,0,0,1,0 1965/1/13,0,1,0,0 1965/1/14,0,0,1,0 1965/1/18,1,0,0,0 1965/1/19,0,1,0,0 1965/1/20,0,1,0,0 1965/1/21,0,0,1,0 1965/1/22,0,1,0,0 1965/1/25,0,1,0,0 1965/1/26,0,1,0,0 1965/1/27,0,0,1,0 1965/1/28,0,1,0,0 1965/1/29,0,1,0,0 1965/2/1,0,0,1,0 1965/2/2,0,1,0,0 1965/2/3,0,0,1,0 1965/2/4,0,0,0,1 1965/2/5,0,0,1,0 1965/2/8,0,1,0,0 1965/2/9,0,1,0,0 1965/2/10,0,1,0,0 . . . . . .

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

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

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

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

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

hayataka2049

2019/07/13 07:44

コードと説明がわかりづらいので、どういう意図で書いているのかコメント付けてもらっていいでしょうか? あと、入力データも掲載していただけると回答しやすいです。
ysk.Lab

2019/07/13 08:03

shapeを表示してみた所、「mat.shape= (0,)」でした
ysk.Lab

2019/07/13 08:04

data2 = [ v for v in df2]をやり直した所 --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-50-7de333948cf8> in <module> ----> 1 data2 = [ v for v in df2] <ipython-input-50-7de333948cf8> in <listcomp>(.0) ----> 1 data2 = [ v for v in df2] ~/anaconda3/envs/tf14kera_py36/lib/python3.6/codecs.py in decode(self, input, final) 319 # decode input (taking the buffer into account) 320 data = self.buffer + input --> 321 (result, consumed) = self._buffer_decode(data, self.errors, final) 322 # keep undecoded input until the next call 323 self.buffer = data[consumed:] UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 6: invalid start byte 上記のようなエラー文が発生しました。
hayataka2049

2019/07/13 08:09 編集

ばらばらに実行するとわけがわからなくなるので、まとまった処理は1セルの中に書いてまとめて実行するようにしてください。
hayataka2049

2019/07/13 10:26

これは正直参考にしているコードが悪いですね。他を見た方が良いと思います・・・
ysk.Lab

2019/07/13 10:29

深層学習による株価予測の研究をしたいと考えていて、初学者ですが実際にコード動かして学習しようと..
hayataka2049

2019/07/13 10:36

コードを動かして学ぶ目的であれば、定評のある書籍を選んでください。ネットの記事にはずいぶんいい加減なものもあります。その記事はコードを見ただけでpythonに不慣れな人が書いているとわかる水準のものです(内包表記無駄だし、データ読み込みなんかはpandasでやった方が良いでしょう。説明も不親切ですし、コードの見た目も我流でやってて読みづらいものです。それでも一応書いてあるとおりにやれば動くみたいではありますが)。 また、初学者が高度なことに挑戦するのは難しいです。ですから、自身の理解が及ぶところからやっていくことをおすすめします。
guest

回答1

0

ベストアンサー

とりあえずIndexError: too many indices for arrayなので、配列のndimがおかしいことになります。

python

1>>> import numpy as np 2>>> a = np.arange(10) 3>>> a 4array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 5>>> a[:] # ndim=1でaxis=0に対して指定しているので可能 6array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 7>>> a[:,:] # ndim=1でaxis=0, 1に対して指定しているのでエラーになる 8Traceback (most recent call last): 9 File "<stdin>", line 1, in <module> 10IndexError: too many indices for array 11

csvの配列への変換がうまく行っていない気がしますが、とりあえずはエラーが出る直前にshapeがどうなっているのかを確認するといいのではないでしょうか。

投稿2019/07/13 07:52

hayataka2049

総合スコア30933

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

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

ysk.Lab

2019/07/13 08:09

data2 = [ v for v in df2]をやり直した所 --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-50-7de333948cf8> in <module> ----> 1 data2 = [ v for v in df2] <ipython-input-50-7de333948cf8> in <listcomp>(.0) ----> 1 data2 = [ v for v in df2] ~/anaconda3/envs/tf14kera_py36/lib/python3.6/codecs.py in decode(self, input, final) 319 # decode input (taking the buffer into account) 320 data = self.buffer + input --> 321 (result, consumed) = self._buffer_decode(data, self.errors, final) 322 # keep undecoded input until the next call 323 self.buffer = data[consumed:] UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 6: invalid start byte 上記のようなエラー文が発生しました。
hayataka2049

2019/07/13 08:15

t-data.csvの文字コードがUTF-8ではないのだと思います。文字コードを確認して、UTF-8に変換するか、openする際に適切な文字コードをencoding引数で指定するとよいかと。
ysk.Lab

2019/07/13 08:24

ひとまず t-data.csvをUTF-8の.csvで保存し直した所、上記のエラーは解消されました
ysk.Lab

2019/07/13 08:33

エラーの前のshapeを確認しました mat4.shape= (13417, 5)でした。行数が多すぎる事は関係あるのでしょうか??
hayataka2049

2019/07/13 08:34

関係ないかと。その状態では失敗しますか?
ysk.Lab

2019/07/13 09:59

やはり同様のエラーが確認されます。。
hayataka2049

2019/07/13 10:19

>同様のエラー そのままペーストしてみてください。
hayataka2049

2019/07/13 10:20

あと、質問文の「csvファイル」はcsv(カンマ区切り)ではありません。 エクセルで開いた結果などを貼っているのであれば、テキストエディタで開いた結果をコピペしてください。テキストエディタで開いてもこれなら、区切り文字の設定が必要です。
ysk.Lab

2019/07/13 10:26 編集

このエラー文で ValueError: could not convert string to float: ['-1.0990']のような 配列内に’’を含んだ状態の数字になっていました
hayataka2049

2019/07/13 10:31

同様のエラーではないですね。違うことが書いてあるときは、同様とは思わないでください。 株価データの入手と加工 のところで > ダウンロードしたファイルをExcelなどの表計算ソフトで開いてみると、取引の無い日付の行にnullが入っている。そのような行を削除しておく。 という記述があるので、''のような行は消すといいのだと思います。そうしたら手元では実行できることが確認できました。
ysk.Lab

2019/07/13 11:03

x_data = mat2[:, 1:].astype(np.float) # 2列目以降を抜き出してfloat変換 このコードによってfloat型に変換されるはずなんですが、、 やはりこのエラー文で ValueError: could not convert string to float:
hayataka2049

2019/07/13 11:05

csvファイルを編集して、空のデータが含まれている行を削除しないとだめです。
ysk.Lab

2019/07/13 11:10

エクセルのフィルタ機能を使って、nullは排除しました。
hayataka2049

2019/07/13 11:11

null以外でも、たとえば 1965/1/5,,,, などは削除する必要があります。
ysk.Lab

2019/07/13 11:24

解決することができました! 本当にディテールまでありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問