ValueError の修正: Python でシーケンスを使用して配列要素を設定する

Zeeshan Afridi 2023年10月8日
  1. Python の Numpy 配列
  2. Python で Numpy 配列を作成する
  3. Python での ValueError: 配列要素をシーケンスで設定する エラーの原因
  4. Python の ValueError: setting an array element with a sequence エラーを修正
ValueError の修正: Python でシーケンスを使用して配列要素を設定する

Python では、配列は最も一般的で便利なデータ構造の 1つであり、複数の値のコレクションです。 配列の要素は、要素の位置であるインデックスを介してアクセスされます。

ある時点でエラー ValueError: 配列要素をシーケンスで設定 とやり取りしたことがあるかもしれません。 この ValueError は、主に 2つのシナリオで発生します。 1つ目は、1つの配列インデックスに複数の値を割り当てようとした場合で、2つ目は、定義された配列に無効なデータ型を割り当てようとした場合です。

ご存じのとおり、配列は本質的に同種です。 配列全体で単一のデータ型を受け入れます。

Python の Numpy 配列

Numpy は、メトリクス、線形代数、フーリエ変換などに最もよく使用される オープン ソース ライブラリです。Travis Oliphant によって 2005 年に作成されました。

Python では、配列の目的を提供するリストがありますが、Numpy の作成者は、リストよりも 50 倍高速な配列を証明すると主張しています。 これは、Numpy 配列を使用する主な目的の 1つです。

Python で Numpy 配列を作成する

Numpy 配列の構文は非常に単純です。 numpy ライブラリをプログラムにインポートし、それに応じて使用する必要があります。

# import numpy library
import numpy as np

# creating a numpy array
arr = np.array([1, 2, 4, 5, 6])

print(arr)

出力:

[1 2 4 5 6]

従来の配列を Numpy 配列に変換することもできます。

# import numpy library
import numpy as np

conventional_array = [1, 2, 3, 4, 5]
print("The data type conventional array is: ", type(conventional_array))

# converting a conventional array into a numpy array
arr = np.array(conventional_array)

print("The data type of numpy array is: ", type(arr))
print(arr)

出力:

The data type conventional array is:  <class 'list'>
The data type of numpy array is:  <class 'numpy.ndarray'>
[1 2 3 4 5]

従来の配列の型は list クラスに属していましたが、Numpy 配列に変換した後は numpy.ndarray クラスに属します。

Python での ValueError: 配列要素をシーケンスで設定する エラーの原因

説明したように、Python では、1つの位置に複数の値を代入しようとしたり、不適切なデータ型を配列に代入しようとすると、ValueError: 配列要素をシーケンスで設定する エラーが発生します。 ご存じのとおり、配列は同種のデータ構造であり、単一の配列に複数のデータ型を格納することはできません。

例を通して、これら両方のシナリオを理解しましょう。

# import numpy library
import numpy as np

arr = [1, 2, 3, 4, 5, 6, 7]
numpy_arr = np.array(arr)

# print the element at 0 index, which is the first element
print("The first element of the array: ", numpy_arr[0])

# assign two values (1,2) to the 0th index  --> Error
numpy_arr[0] = 1, 2

出力:

The first element of the array:  1
ValueError: setting an array element with a sequence.

上記のプログラムの最後のコードでわかるように、2つの値 1,2numpy_arr のインデックス 0 に割り当てようとすると、エラー ValueError: set a array element with a sequence

これは、インデックスに単一の値しか格納できないためです。 ただし、単一のインデックスが個々の値を指すように、それを別の値に置き換えることができます。

では、2 番目のシナリオを見てみましょう。

# import numpy library
import numpy as np

# Creating an array
array1 = [1, 2, [0, 0], 4, 5]
print(array1)
print("The data type of the conventional array is: ", type(array1))

# This causes Value error
np_array = np.array(array1, int)

print("\n", np_array)
print("The data type of of numpy array is: ", type(np_array))

出力:

[1, 2, [0, 0], 4, 5]
The data type of the conventional array is:  <class 'list'>
ValueError: setting an array element with a sequence.

この場合、numpy array に割り当てたデータ型がこのエラーの原因です。 このステートメント np_array = np.array(array1, int) では、2 番目のパラメーター int がこのエラーを引き起こしています。

ご覧のとおり、array1 のクラスはリストなので、そのまま int に変換することはできません。

Python の ValueError: setting an array element with a sequence エラーを修正

上記の例で、ValueError の原因を確認しました。 この ValueError を修正する方法を見て理解しましょう。

最初のシナリオは非常に単純です。 1つのインデックスに 1つの値のみを割り当てます。

# import numpy library
import numpy as np

# creating a numpy array
numpy_arr = np.array([1, 2, 3, 4, 5])
print(numpy_arr)

# assigning 0 value at the 0th index
numpy_arr[0] = 0
print(numpy_arr)

出力:

[1 2 3 4 5]
[0 2 3 4 5]

2 番目のシナリオでは、あらゆる場合に受け入れられる汎用データ型 object を使用できます。 以下の例で見てみましょう。

# import numpy library
import numpy as np

# creating an array
arr = [1, 2, [9, 8], 3, 4]

# This causes Value error
np_arr = np.array(arr, object)

print(np_arr)

出力:

[1 2 list([9, 8]) 3 4]

ご覧のとおり、データ型を int から object に変更した後、プログラムはスムーズに実行されました。 object はユニバーサル データ型であるため、リストであろうと単一の int 値であろうと、配列のすべての部分をオブジェクトとして扱います。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error