为何numpy.trapz处理布尔值与整数时表现存在差异?
问题解答
核心原因是旧版本numpy(及scipy)对布尔类型数组的数值运算处理存在类型转换差异:
- 当输入为整数列表
[1,1]时,numpy将其转为整数类型数组,按梯形积分公式计算:$\frac{(1+1)}{2} \times 1 = 1.0$,最终结果为1.0。 - 当输入为布尔列表
[True,True]时,旧版本中布尔数组的加法不会自动提升类型:True + True会被截断为True(布尔类型仅能表示0/1,数值2被强制转为1),此时计算$\frac{1}{2} \times 1 = 0.5$,最终结果为0.5。
新版本numpy(及较新scipy版本)已修复此问题,布尔数组参与数值运算会自动转为整数类型,两种输入结果一致。
若要避免这类差异,可手动将布尔数组转为整数类型后传入:
import numpy as np np.trapz(np.array([True, True], dtype=int)) # 返回1.0
内容的提问来源于stack exchange,提问作者matiasg
相关产品推荐
相关产品推荐

