该
numpy.where文档指出:
如果
x和y被赋予与输入的数组是1-d,where相当于::[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
那么,为什么会看到错误?举个简单的例子:
c = 0result = (1 if c==0 else 1/c)# 1
到现在为止还挺好。
if c==0首先检查,结果为
1。该代码不会尝试进行评估
1/c。这是因为Python解释器处理一个 惰性
三元运算符,因此仅求值适当的表达式。
现在,我们将其转换为
numpy.where方法:
c = 0result = (xv if c else yv for (c, xv, yv) in zip([c==0], [1], [1/c]))# ZeroDivisionError
zip([c==0], [1],[1/c])即使在应用逻辑之前,评估中也会发生错误。生成器表达式本身无法求值。作为一个函数,
numpy.where不能也确实不能复制Python三元表达式的惰性计算。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)