迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

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

作者:迹忆客 最近更新:2023/07/06 浏览次数:

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

您可能在某个时刻以某种方式产生错误 ValueError: setting an array element with a sequence。 这个ValueError主要发生在两种场景; 第一个是当您尝试将多个值分配给单个数组索引时,第二个是当您尝试将无效数据类型分配给定义的数组时。

众所周知,数组本质上是同质的。 它们在整个数组中接受单一数据类型。


Python 中的 Numpy 数组

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

在 Python 中,列表为我们提供了数组的用途,但 Numpy 创建者声称他们证明数组比列表快 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 原因

正如所讨论的,当您尝试将多个值分配给单个位置或将不正确的数据类型分配给数组时,Python 中会出现 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.

正如您在上述程序的最后代码中看到的,当我们尝试将两个值 1,2 分配给 numpy_arr 的 0 索引时,我们得到错误 ValueError: seting 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 数组的数据类型是造成此错误的原因。 在此语句 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]

在第二种情况下,我们可以使用在每种情况下都接受的通用数据类型,即对象。 让我们在下面的例子中看看。

# 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 值。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 错误 ValueError: Too Many Values to Unpack

发布时间:2023/07/09 浏览次数:771 分类:Python

当赋值运算符 = 左侧的变量不等于赋值运算符 = 右侧的值时,有时会出现 ValueError: Too much value to unpack。当您尝试在单个输入语句中从用户处获取多个输入或将不相等的变量分配给某些值时,通

Python 错误 Valueerror: Expected 2d Array, Got 1d Array Instead

发布时间:2023/05/30 浏览次数:293 分类:Python

当我们在 numpy 中传递一维数组而不是二维数组时,会发生错误 ValueError: Expected 2D array, got 1D array instead 。如您所知,每种编程语言都会遇到很多错误,有些是在运行时,有些是在编译时。 Pyth

Python 中错误 ValueError: Invalid Literal for Float()

发布时间:2023/05/17 浏览次数:403 分类:Python

Python 中 ValueError: invalid literal for float()。 float() 函数无法将字符串类型转换为浮点数。 相反,它会抛出一个 ValueError,它可能会因您的 Python 版本而异。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便