用零错误替换除法,零块为numpy

时间:2014-05-07 11:45:00

标签: python numpy

我有一个长度为N的向量D和一个形状为N * M的矩阵A.矢量D有一些零元素。我正在做这个操作:

D = D.reshape(-1,1)
A / D

然而,由于D中的某些元素为零,我得零除错。我需要的是在零除以而不是引发错误时将零置零。怎么做?

E.g。我的尝试:

A = [ [0,1,0,0,0,0], 
          [0,0,1,1,0,0],
          [1,0,0,1,1,0],
          [0,0,0,0,1,0],
          [0,0,0,0,0,0],
          [0,0,0,0,1,0] 
          ]
A = np.array(A, dtype='float')

D = np.sum(A, axis=1)
D = D.reshape(-1, 1)

A = np.where(D != 0, A / D, 0)

RuntimeWarning: invalid value encountered in divide
  A = np.where(D != 0, A / D, 0)

2 个答案:

答案 0 :(得分:1)

您可以为D使用屏蔽数组,例如:

D = np.ma.array(D, mask=(D==0))

当您使用蒙版数组执行计算时,只会考虑非蒙版值。

答案 1 :(得分:0)

为什么不使用try-catch块?像

这样的东西

try: some_var = A/D except ZeroDivisionError: some_var = 0