numpy.recarray调用sum/max方法报flexible type类型错误该如何解决
报错原因
numpy.recarray属于结构化数组的子类,你构造的数组每个元素是包含x、y、z三个不同类型字段的结构体,numpy默认不支持直接对包含多字段的结构化数组执行聚合运算,所以会抛出flexible type相关的类型错误。
解决方案
你可以根据自己的需求选择对应处理方式:
- 单字段单独聚合:如果只需要对某个字段做聚合,直接提取对应字段后运算即可
# 分别对三个字段求和 x_sum = a['x'].sum() y_sum = a['y'].sum() z_sum = a['z'].sum() - 全字段整体聚合:如果需要把所有字段的数值合并为普通同类型数组再做聚合,可以先转换格式再运算
# 方法1:手动转换视图,适合所有numpy版本 numeric_a = a[list(a.dtype.names)].view('<f8').reshape(a.shape + (-1,)) # 按axis=0求和 res = numeric_a.sum(axis=0)# 方法2:用官方工具函数转换,适合numpy 1.16及以上版本 from numpy.lib.recfunctions import structured_to_unstructured numeric_a = structured_to_unstructured(a) res = numeric_a.sum(axis=0)
注意:你示例中构造的
recarray没有做初始化赋值,数组内的默认值是内存随机残留的垃圾值,实际使用时请先给对应字段赋值后再执行聚合运算。
内容的提问来源于stack exchange,提问作者ippischtobi
相关产品推荐
相关产品推荐

