我正在通過矩陣逐點除法來完成矩陣,但除數矩陣中有一些零。這導致警告並在一些NaN中。我想這些映射到0,這是我可以這樣做:用零numpy替代除數
edge_map = (xy/(x_norm*y_norm))
edge_map[np.isnan(edge_map)] = 0
但也有與此兩個問題,首先它仍然給所有的警告(我不喜歡的警告)和第二這需要對矩陣進行第二遍(不確定這是否是不可避免的),並且效率對於這部分代碼非常重要。想法?
我正在通過矩陣逐點除法來完成矩陣,但除數矩陣中有一些零。這導致警告並在一些NaN中。我想這些映射到0,這是我可以這樣做:用零numpy替代除數
edge_map = (xy/(x_norm*y_norm))
edge_map[np.isnan(edge_map)] = 0
但也有與此兩個問題,首先它仍然給所有的警告(我不喜歡的警告)和第二這需要對矩陣進行第二遍(不確定這是否是不可避免的),並且效率對於這部分代碼非常重要。想法?
這可能是最快的解決方案,但因爲它預先計算的解決方案where
功能不觸發錯誤:
import numpy as np
n = 4
xy = np.random.randint(4, size=(n,n)).astype(float)
x_norm = np.random.randint(4, size=(n,n)).astype(float)
y_norm = np.random.randint(4, size=(n,n)).astype(float)
xy_norm = x_norm*y_norm
edge_map = np.where(xy_norm == 0, xy_norm, xy/xy_norm)
print(xy)
print(xy_norm)
print(edge_map)
這與「with numpy.errstate(divide ='ignore'):」解決了問題,並且比我自己的解決方案更快,謝謝 –
我已經添加了類型轉換,否則分區都會給零。 – Chiel
是這樣,這將意味着我需要做第二遍,有關警告任何線索? –
http://stackoverflow.com/a/26248892/382936建議使用'numpy.errstate(divide ='ignore')'上下文來抑制警告。另見http://docs.scipy.org/doc/numpy/reference/generated/numpy.errstate.html#numpy.errstate –
這是一個很好的問題。計算結果時,where函數也會觸發警告。面具可能是你最好的選擇。 – Chiel