numpy 分母為零的處理辦法

2021-10-10 16:27:24 字數 1668 閱讀 4683

如果使用for迴圈逐項處理資料,就喪失了numpy陣列運算的優勢。有以下2法可以避免for迴圈。

利用numpy.divide,不為0的項正常除,為0的項賦乙個預設值。

numpy.divide(x1, x2, /, out=none, *, where=true, casting='same_kind', order='k', dtype=none, subok=true[, signature, extobj]) =

2個關鍵引數:初始化乙個結果陣列out,在where陣列為真的地方,就會執行除法,結果存到out的對應位置,在where陣列為假的地方,不操作,保持out原來的值。

示例

>>

> a = np.array([-

1,0,

1,2,

3], dtype=

float

)>>

> b = np.array([0

,0,0

,2,2

], dtype=

float

)# if you don't pass `out` the indices where (b == 0) will be uninitialized!

>>

> c = np.divide(a, b, out=np.zeros_like(a)

, where=b!=0)

>>

>

print

(c)[0.

0.0.

1.1.5]

感謝@~華仔呀的方法:numpy中np.finfo用法

"""

np.finfo使用方法

eps是乙個很小的非負數

除法的分母不能為0的,不然會直接跳出顯示錯誤。

使用eps將可能出現的零用eps來替換,這樣不會報錯。

"""import numpy as np

x = np.array([1

,2,3

], dtype=

float

)eps = np.finfo(x.dtype)

.eps # eps = 2.220446049250313e-16 type =

print

(eps,

type

(eps)

)height = np.array([0

,2,3

], dtype=

float

)height = np.maximum(height, eps)

#一旦height**現0,就用eps進行替換

print

(height)

#[2.22044605e-16 2.00000000e+00 3.00000000e+00]

dy = x / height

print

(dy)

#[4.50359963e+15 1.00000000e+00 1.00000000e+00]

how to return 0 with divide by zero

numpy中np.finfo用法

資料處理之Numpy(以陣列為例)

anaconda numpy 的英文全稱為 numerical python,指python 面向數值計算的第三方庫。numpy 的特點在於,針對 python 內建的陣列型別做了擴充,支援更高維度的陣列和矩陣運算,以及更豐富的數學函式。numpy 是 scipy.org 中最重要的庫之一,它同時也...

numpy建立陣列常用的幾種辦法

一維 a np.array 1,2,3,6 二維 a np.array 1,2,3 5,9,8 一維 a np.zeros 10 指定資料型別 a np.zeros 10,dtype int 二維 a np.zeros shape 3,4 指定資料型別 a np.zeros shape 3,4 dt...

MM 採購退貨的處理辦法

採購退貨的處理方法 一.如果貨物可以追溯到採購訂單且沒有做付款 1.若已經做了發票校驗,需要作沖銷。2.migo選a02 return delivery 參考物料憑證退貨 或者migo 選a01 goods receipt 參考採購訂單 移動102退貨 3.若是gr based ir,那麼miro做...