Python 3.x numpy.where-计算True语句,即使条件为False

Python 3.x numpy.where-计算True语句,即使条件为False,python-3.x,numpy,Python 3.x,Numpy,我有两个变量,分别为零s1=0和s2=0,还有一个数据帧(有更多列,但与本例无关): 我尝试使用np创建一个新列。其中: df['c'] = np.where((df['xyz']>0) & (s1 > 0) & (s2 > 0), 1/s1, 0) 然而,这是一个错误。为什么它在计算True情况,即使条件是False。如何获得所需的结果?现在我了解了python函数在执行之前会评估所有输入。但是在这种情况下,我如何得到想要的结果呢?1/s1总是对s1的每个元

我有两个变量,分别为零
s1=0
s2=0
,还有一个数据帧(有更多列,但与本例无关):

我尝试使用
np创建一个新列。其中

df['c'] = np.where((df['xyz']>0) & (s1 > 0) & (s2 > 0), 1/s1, 0)

然而,这是一个错误。为什么它在计算
True
情况,即使条件是
False
。如何获得所需的结果?

现在我了解了python函数在执行之前会评估所有输入。但是在这种情况下,我如何得到想要的结果呢?
1/s1
总是对
s1
的每个元素进行计算<代码>np。其中然后检查条件并查找相应的值。您可以使用
1/np.divide(1,s1,其中=s1>0)
@QuangHoang,在
ufunc
中使用
where
时,如
divide
,您还应该提供
out
参数。否则,not where值将是不可预测的。@hpaulj谢谢,很高兴知道,不过在这种情况下,not where并不是那么重要。
df['c'] = np.where((df['xyz']>0) & (s1 > 0) & (s2 > 0), 1/s1, 0)