Translate

【エラー】only integer scalar arrays can be converted to a scalar indexってどんなエラー【python】

 
pythonでプログラムを書いているうちに何度もよく遭遇してしまうエラーがまた出てきたので、ここで共有しておこうと思います。

only integer scalar arrays can be converted to a scalar indexはどんな時に起こる?



個人的な体感としては、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型を指定しないと起こりやすい。。。印象。


体感として、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関数を使ってあらかじめ四捨五入をしてやると、配列の指定の際に小数点が含まれることがなくなります。