如何将字符串格式的Numpy数组转换为整数数组?
将字符串格式的NumPy数组转换为整数数组的方法
问题描述
给定如下字符串格式的NumPy数组:
import numpy as np pattern = np.array([['[0, 0, 1, 0, 0]'], ['[0, 1, 1, 1, 1]'], ['[0, 1, 1, 1, 0]'], ['[0, 0, 1, 1, 1]'], ['[0, 0, 0, 1, 1]'], ['[0, 0, 1, 0, 1]'], ['[0, 0, 0, 0, 1]'], ['[1, 0, 1, 0, 0]'], ['[0, 1, 0, 1, 1]'], ['[0, 0, 1, 1, 0]'], ['[1, 1, 1, 1, 1]'], ['[1, 1, 1, 1, 0]']], dtype='<U15')
需要将其转换为纯整数类型的NumPy数组,无需手动逐个修改。
实现方法
这里提供几种高效的非手动实现方式:
方法1:利用ast.literal_eval解析字符串
借助Python标准库ast里的literal_eval函数安全解析字符串列表,结合NumPy向量化操作批量处理:
import numpy as np from ast import literal_eval # 降维处理原数组的单元素列表结构 flat_pattern = pattern.flatten() # 批量解析每个字符串形式的列表 parsed = np.vectorize(literal_eval)(flat_pattern) # 转换为整数数组 result = np.array(parsed, dtype=int)
方法2:字符串清洗+类型转换
直接对字符串做清洗,去除方括号后分割转整数:
import numpy as np # 遍历每个元素,清洗字符串并转换为整数列表 result = np.array([list(map(int, s[0].strip('[]').split(','))) for s in pattern], dtype=int)
方法3:使用numpy.genfromtxt解析文本
把字符串数组当作文本数据源,利用genfromtxt的文本解析能力:
import numpy as np # 将字符串整理成行文本,再用genfromtxt读取转换 text = '\n'.join([s[0].strip('[]') for s in pattern]) result = np.genfromtxt(np.core.defchararray.split(text, sep='\n'), delimiter=',', dtype=int)
内容的提问来源于stack exchange,提问作者Economist_Ayahuasca
相关产品推荐
相关产品推荐

