numpy报bitwise_and不支持输入类型,转float后仍无法匹配两数组
问题原因与解决方案
1. 报错的核心原因是运算符优先级错误
Python中按位与&的优先级远高于>、<这类比较运算符。你写的np.array(array2)>np.array(array3) & np.array(array2[1:])<np.array(array3[1:])实际执行顺序是先计算np.array(array3) & np.array(array2[1:]),这两个输入都是float类型,而按位与运算本身就不支持float类型输入,和你手动转float的操作无关。
2. 存在数组长度不匹配的隐患
alfa_2函数中array2[1:]、array3[1:]是切片后的数组,长度比原数组少1,直接和完整长度的原数组做运算,哪怕解决了优先级问题,后续也会触发长度不匹配的报错。
3. 存在语法错误
你写的跨行entry_rules表达式没有用括号包裹整段逻辑,Python会默认上一行结尾就结束表达式,直接运行会报语法错误。
修复后代码示例
import numpy as np def alfa_1(array1): return np.array(array1) >= 0 def alfa_2(array2,array3): arr2 = np.array(array2) arr3 = np.array(array3) # 所有比较条件加括号避免优先级问题,同时统一数组长度,可根据实际业务调整切片逻辑 cond1 = arr2[:-1] > arr3[:-1] cond2 = arr2[1:] < arr3[1:] return cond1 & cond2 # 跨行逻辑用括号包裹避免语法错误 entry_rules = ( alfa_1(df_indicators2['12 26 9'].astype('float'))[:-1] & alfa_2(df_indicators2['12 26 9'].astype('float'), df_indicators2['12 26 9'].astype('float')) )
如果你的业务逻辑不需要对数组做切片,直接删除alfa_2和alfa_1调用时的切片即可。
内容的提问来源于stack exchange,提问作者user15606993
相关产品推荐
相关产品推荐

