修复Python错误ValueError: Setting an Array Element With a Sequence

在Python中,数组是最常见和最有用的数据结构之一,是一个以上值的集合。数组的元素通过索引访问,索引是元素的位置。

您可能在某个时候与错误ValueError: setting an array element with a sequence发生了交互。此ValueError主要发生在两种场景下;第一种是当你试图给一个数组索引分配多个值时,第二种是当你试图给定义的数组分配无效的数据类型时。

正如我们所知,阵列在本质上是同质的。它们在整个数组中接受单一数据类型。

Python中的Numpy数组

Numpy是一个开源库,主要用于度量,线性代数,傅立叶变换等。由Travis Oliphant于2005年创立。

在Python中,我们有Lists为我们提供了数组的用途,但Numpy的创建者声称他们证明了数组比Lists快50倍。这是使用Numpy数组的核心目的之一。

在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: setting an array element with a sequence错误。正如我们所知,数组是同构的数据结构,不能在单个数组上存储多种数据类型。

让我们通过例子来理解这两种情况。

# 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.

正如你在上面程序的最后一段代码中看到的,当我们试图将两个值1,2分配给0numpy_arr索引时,我们得到错误ValueError: setting an array element with a sequence

这是因为我们只能在索引中存储一个值。但是,我们可以用另一个值来替换它,这样一个索引将指向一个单独的值。

现在,让我们来看看第二种情况。

# 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)中,第二个参数int导致了这个错误。

正如你所看到的,array1的类是一个列表,所以不可能直接将其转换为int。

修复Python中的 ValueError: setting an array element with a sequence 错误

我们现在已经在上面的例子中看到了导致ValueError的原因。让我们来看看并了解如何修复此ValueError。

第一种情况非常简单。您只能为单个索引分配一个值。

# 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]

在第二个场景中,我们可以使用在任何情况下都接受的通用数据类型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值。