我试图在python中执行一个元素明智的除法,但如果遇到零,我需要商为零。
举例来说:
array1 = np.array([0, 1, 2])
array2 = np.array([0, 1, 1])
array1 / array2 # should be np.array([0, 1, 2])
字符串
我总是可以使用for循环遍历我的数据,但要真正利用numpy的优化,我需要divide函数在除以零错误时返回0,而不是忽略错误。
除非我遗漏了什么,否则numpy.seterr()似乎不会在出错时返回值。有没有人对我如何在设置自己的除以零错误处理时从numpy中获得最佳效果有任何其他建议?
9条答案
按热度按时间soat7uwm1#
在numpy v1.7+中,您可以利用ufuncs的“where”选项。您可以在一行中完成任务,而不必处理errstate上下文管理器。
字符串
在这种情况下,它在B不等于零的任何地方进行除法计算。当B等于0时,它保持不变,无论你最初在'out'参数中给它什么值。
vu8f3i0k2#
基于@Franck Dernoncourt的答案,修复了-1/0和我在标量上的错误:
字符串
mzsu5hc03#
以其他答案为基础,并在以下方面进行改进:
0/0
通过将invalid='ignore'
添加到numpy.errstate()
进行处理numpy.nan_to_num()
将np.nan
转换为0
。代码:
字符串
输出量:
型
9fkzdhlc4#
已弃用(PYTHON 2溶液):
一行程序(抛出警告)
字符串
b4lqfgs45#
试着分两步做。先分裂,再替换。
字符串
numpy.errstate
行是可选的,它只是防止numpy告诉你除以零的“错误”,因为你已经打算这样做了,并处理了这种情况。3zwtqj6y6#
你也可以基于
inf
进行替换,只有当数组dtypes是浮点数时,就像this answer一样:字符串
8iwquhpp7#
我在搜索相关问题时发现的一个答案是根据分母是否为零来处理输出。
假设
arrayA
和arrayB
已经初始化,但是arrayB
有一些零。如果我们想安全地计算arrayC = arrayA / arrayB
,我们可以这样做。在本例中,只要在一个单元格中有除以零的操作,就将该单元格设置为等于
myOwnValue
,在本例中为零字符串
脚注:回想起来,这一行是不必要的,因为
arrayC[i]
被示例化为零。但是如果是myOwnValue != 0
的情况,这个操作会做一些事情。kd3sttzy8#
使用try/except来管理任何类型的numpy RuntimeWarnings的解决方案:
字符串
iszxjhcz9#
另一个值得一提的解决方案:
字符串