ValueError の修正: Python でシーケンスを使用して配列要素を設定する
- Python の Numpy 配列
- Python で Numpy 配列を作成する
-
Python での
ValueError: 配列要素をシーケンスで設定する
エラーの原因 -
Python の
ValueError: setting an array element with a sequence
エラーを修正
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,2
を numpy_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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません