Translate
pythonでプログラムを書いているうちに何度もよく遭遇してしまうエラーがまた出てきたので、ここで共有しておこうと思います。
個人的な体感としては、only integer scalar arrays can be converted to a scalar indexエラーは、numpyとかでデータの範囲を切り出すときによく見抱えるエラーでした。
実際私が良く書くnumpyを使って特定のデータの範囲をあらかじめ用意しておいたデータの配列から読み取ってやるときに出てきます。
forループの中で何度もデータの範囲を切り出すときに、あらかじめループ外に配列を作っておきそこからデータを読み取るといったあれです。
体感として、only integer scalar arrays can be converted to a scalar indexエラーは「本来整数を入れないといけない場所に配列をぶち込んでいる」といった時に起きてしまっているように感じます。事実こんな感じにコード書いてエラー履いた時は、int型を指定してやることで直ることが多いです。具体的には
data = data[range1[1]:range1[2]]
こういった範囲指定の書き方を
data = data[int(range1[1]):int(range1[1])]
みたいな書き方に変えると、only integer scalar arrays can be converted to a scalar indexが起きにくいという実感はあります。
余談ではありますが、他にはrange1の中身がfloat型で中に少数を含んだ値が入っていたりすると、同じようなエラーが起こることがあります。
そういう時には、こんな感じで書き替えてやるとさらにエラーが起こる確率が減ります。
data = data[int(round(range1[1])):int(round(range1[1]))]
pythonに元から入っているround関数を使ってあらかじめ四捨五入をしてやると、配列の指定の際に小数点が含まれることがなくなります。