创建numpy数组时遇ValueError:预定义长度为5的混合类型数组报错
解决NumPy数组存储混合类型元素的ValueError问题
你遇到的问题根源是NumPy默认创建的数组是同质类型的(比如默认是float64数值类型),而你想在每个数组元素里存储混合了数值和字符串的列表——这种异构的Python对象没法直接放进默认类型的NumPy数组里,再加上赋值逻辑的问题,就触发了ValueError。
正确的实现方式
要实现你想要的效果,需要创建一个dtype=object的NumPy数组,这种类型的数组可以存储任意Python对象(包括混合类型的列表)。具体代码如下:
import numpy as np arr_length = 5 # 别用`len`当变量名,这会覆盖Python内置的`len()`函数! results = np.empty(arr_length, dtype=object) # 明确指定dtype为object for i in range(arr_length): results[i] = [999, 'sss'] # 直接把混合类型列表赋值给数组的每个元素
运行这段代码后,results数组的每个元素都会是包含数值和字符串的列表,不会再触发报错。
为什么原来的代码会报错?
- 你用
np.empty(len)创建的数组默认是数值类型,NumPy会尝试把你赋值的列表转换成数值类型,显然这是不可能完成的操作,所以抛出ValueError。 - 哪怕你改成嵌套列表
[[999], ['sss']],本质还是试图把一个Python列表对象放进数值类型的数组位置,类型完全不匹配,依然会报错。
内容的提问来源于stack exchange,提问作者user8330379
相关产品推荐
相关产品推荐

