IndexError の解決: インデックスとして使用される配列は、整数(またはブール) 型でなければなりません

Olorunfemi Akinlua 2023年6月21日
IndexError の解決: インデックスとして使用される配列は、整数(またはブール) 型でなければなりません

Python で Numpy 配列を操作する場合、インデックスまたはタイプの問題を扱うさまざまなエラー メッセージが表示されることがあります。 これらの多くのエラー タイプでは、IndexError: インデックスとして使用される配列は整数 (またはブール) 型でなければなりません は注意が必要です。

IndexError エラー メッセージに直面した場合、間違ったタイプを使用します。 この場合、Integer または Boolean を使用することになっていましたが、配列インデックスは別のデータ型 (string または float) を受け取ります。

この記事では、Numpy で数値を操作する際の IndexError: arrays used as indexes must be of integer (or boolean) type エラー メッセージの対処方法について説明します。

astype() を使用して Numpy で IndexError: array used as index must be of integer (or boolean) type を解決する

Numpy は、Integer または Boolean の 2つのタイプでのみ機能します。 そのため、理解できない型があるとエラーになります。

このエラー メッセージをよりよく理解するために、エラー メッセージを再作成してみましょう。 エラー メッセージを再現するには、2つの Numpy 配列 indexarray を生成し、index から値を抽出し、抽出した値を使用して array の値にアクセスする必要があります。

抽出された値については、最初の列の値を使用します。

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])

indices = index[:, 0]
print(array[indices])

出力:

Traceback (most recent call last):
  File "temp.py", line 7, in <module>
    print(array[indices])
IndexError: arrays used as indices must be of integer (or boolean) type

IndexError: arrays used as indicators must be of integer (or boolean) type エラー メッセージから、問題が print(array[indices]) セクションに起因することがわかります。

構文的に正しいことがわかっているので、探している問題が array バインディングに解析しているものに存在することがわかります。 これで、indices バインディングにたどり着きます。

エラー メッセージからわかることによると、indices バインディングの要素は integer または Boolean ではない可能性があります。 dtype プロパティは、indices 内の要素のタイプをチェックするのに役立ちます。

print(indices.dtype)

出力:

float64

これで、私たちが直面している問題の原因が確認されました。 array バインディングのインデックスに渡す値は、Boolean ではなく float64 です。

これを解決するには、indices の値を Integer または Boolean に変換する必要があります。 それらを Integer に変換する方が理にかなっています。

それらを Boolean に変換すると、別の機会に役立つかもしれません。

astype() メソッド は、Numpy 配列の dtype プロパティを変更するのに役立ちます。 indices バインディングの dtype を変更するには、以下を使用できます。

indices = index[:, 0].astype(int)

indices.dtype 式を使用して dtype プロパティをチェックすると、以下が得られます。

int32

これで、コードは次のようになります。

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])

indices = index[:, 0].astype(int)
print(array[indices])

出力:

[[1 2 3]
 [4 5 6]]

indices の値を Boolean に変換できました。 それを試してみましょう。

そのために、2つのブール値を持つ Numpy 配列があります。

indices = index[:, 0].astype(bool)
print(indices)

出力:

[False  True]

indices バインディングの値は [0. 1.] であり、0 をブール値に変換すると False になり、それ以外の数値は True になります。 すべてを一緒に実行しましょう。

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 3, 5], [7, 9, 11]])

indices = index[:, 0].astype(bool)
print(array[indices])

出力:

[[ 7  9 11]]

これは、True 値のみを処理するためです。

したがって、IndexError: arrays used as indexes must be of integer (or boolean) type エラー メッセージが表示された場合は、どこかに間違った dtype があることを知ってください。 コードをトレースし、必要な値を変換します。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Python Error