如果使用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做...