如何将列表组成的NumPy数组转换为普通NumPy数组?
解决NumPy数组转换时的ValueError问题
你遇到的问题很典型:当把包含逗号分隔字符串的NumPy数组转成数值型数组时,用np.core.defchararray.split得到了一个元素为列表的对象数组,直接调用astype(float)就会触发ValueError——这是因为NumPy无法直接将列表类型的元素转换为单个float值。
下面给你几个可行的解决方法:
方法一:用np.stack堆叠对象数组元素
np.stack可以把对象数组里的每个列表元素堆叠成标准的二维NumPy数组,之后就能正常转换类型了:
import numpy as np a = np.array(["0,1", "2,3", "4,5"]) b = np.core.defchararray.split(a, sep=',') c = np.stack(b).astype(float) print(c) # 输出: # [[0. 1.] # [2. 3.] # [4. 5.]]
方法二:直接用列表推导式处理原数组
跳过中间的对象数组,直接对原数组的每个字符串元素做分割,再转成数值数组,这种方式更简洁直接:
import numpy as np a = np.array(["0,1", "2,3", "4,5"]) c = np.array([x.split(',') for x in a], dtype=float) print(c) # 输出和上面一致
方法三:用np.genfromtxt直接解析字符串数组
如果你想一步到位,也可以用np.genfromtxt直接解析包含逗号分隔内容的字符串数组:
import numpy as np a = np.array(["0,1", "2,3", "4,5"]) c = np.genfromtxt(a, delimiter=',', dtype=float) print(c) # 输出同样一致
内容的提问来源于stack exchange,提问作者Wong Jones
相关产品推荐
相关产品推荐

