如何将元素为字符串数组的numpy数组转换为嵌套结构的numpy数组?
Numpy字符串数组转三维数值数组优化方案
你当前使用的json.loads方案仅适配标准JSON格式的字符串,如果字符串包含Python特有字面量(比如单引号、True/False、None等)会解析失败,且map+列表推导的方式在数据量较大时性能一般,以下是两种更优实现:
方案1:高适配性实现(小数据量首选)
用ast.literal_eval替代json.loads,它是专门用来解析Python字面量的工具,安全性和适配性都更高,代码也更简洁:
import ast import numpy as np res = np.array([ast.literal_eval(s) for s in test])
输出直接为shape是(2,2,3)的数值数组,和预期完全一致。
方案2:高性能实现(大数据量首选)
如果你的test数组长度很大(上万条元素及以上),用numpy向量化函数替代Python层循环,性能提升非常明显:
import ast import numpy as np # 把解析函数转为numpy支持的向量化函数 parse_func = np.frompyfunc(ast.literal_eval, 1, 1) # 解析后堆叠转换为指定类型的数值数组 res = np.stack(parse_func(test)).astype(np.int64)
这个方案避免了Python侧的遍历开销,数据量越大性能优势越突出。
内容的提问来源于stack exchange,提问作者Tontodoin
相关产品推荐
相关产品推荐

