在np.where条件中使用min,max函数时出现以下错误。
ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
我想将“ for”循环转换为更快的计算,所以我尝试使用“ np.where”功能切换我的计算。
循环代码的原始工作
for p in range (1,len(curve_details)):
curve_details.loc[p,'coupon_after']=max(floor,min(ceiling,
curve_details.loc[p-1,'coupon_after']
+ max(move_cap_down, min(move_cap_up,
curve_details.loc[p,'coupon_before']
-curve_details.loc[p-1,'coupon_after']))))
我正在尝试的新代码
curve_details['coupon_after']=np.where(curve_details.index>0,
max(floor,min(ceiling,
curve_details.loc[curve_details.index-
1,'coupon_after'] + max(move_cap_down,
min(move_cap_up,
curve_details.loc[curve_details.index,'coupon_before']
-curve_details.loc[curve_details.index-
1,'coupon_after'])))),int_rate)
我想加速我的for循环,因此已切换到“ np.where”功能。我现在可以在代码中进行哪些更改以消除值错误?
答案 0 :(得分:0)
您不能在数组和标量上使用裸max
或min
。尝试使用np.clip
。我没有示例数据,因此无法在您的代码中显示。但是一个简单的例子:
x = np.arange(10)
cap = 6
low = 3
np.clip(x, low, cap)
# is equivalent to (and much better than):
np.array([max(low, min(cap, i)) for i in x])