我有一个三维numpy数组,需要做一些数学上。有除法、指数法和根提取法。由于我不能控制数组中的输入,numpy必然会遇到一堆数学错误。你知道吗
目前,我正试图抓住所有可能的例外,但有太多,我永远不能确定,如果我得到所有的每一个可能的szenario和50+公式。我的意图是用nodata值初始化输出矩阵,并且在发生错误时numpy将它们留在原位。你知道吗
将以下示例作为一维表示(numpy作为np导入):
a = np.array([10, 20, 30, 40], dtype=np.float16) # my data source
b = np.full(shape=(4,3), fill_value=-999, dtype=np.float16) # shape: length =4, no. of different calculations=3
b[:,0] = a / (a-10)
b[:,1] = a**200
b[:,2] = np.sqrt(a-40)
如果我这样运行代码,我会得到三个RuntimeWarning(除零、溢出和sqrt中的无效值)。不过,我的b数组中仍然充满了结果:
b[:,0] -> [ inf 2. 1.5 1.333 ]
b[:,1] -> [ inf inf inf inf ]
b[:,2] -> [ nan nan nan 0. ]
相反,我希望numpy跳过计算并保留初始化的值,以便
b[:,0] -> [ -999. 2. 1.5 1.333 ]
b[:,1] -> [ -999. -999. -999. -999. ]
b[:,2] -> [ -999. -999. -999. 0. ]
我可以稍后将inf或nan转换为-999,但这是另一个迭代和耗时。我还发现了np.seterr(all='ignore')
,但这只是抑制了到我的控制台的输出。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐