Einsum会产生溢出。为什么?

时间:2019-05-03 15:37:57

标签: python numpy

这是有效的代码:

for iElem in range(nElem) :
      nodes      = elem[iElem]
      x          = X[nodes]
      y          = Y[nodes]
      jac        = abs((x[0]-x[1]) * (y[0]-y[2]) - (x[0]-x[2])* (y[0]-y[1]))
      B[iElem,:] = np.dot(Ainverse,B[iElem])/jac

这是无效的代码

    x2          = X[elem]
    y2          = Y[elem]
    jac2        = abs((x2[:,0] - x2[:,1]) * (y2[:,0]-y2[:,2]) - (x2[:,0]-x2[:,2])* (y2[:,0]-y2[:,1]))
    iJac2       = np.power(jac2,-1)
    K           = np.zeros(np.shape(B))
    F           = np.zeros(np.shape(B))
    K           = np.einsum('ih,jh->ji',Ainverse,B)
    F           = np.einsum('ih,i->ih',K,iJac2)
    B           = F

显然,当我使用朴素的方法打印B和使用einsum方法的B时,它包含相同的元素,但是当我使用它时,我的下一个代码没有相同的值并显示警告:

RuntimeWarning:在乘法运算中遇到溢出

RuntimeWarning:在添加中遇到溢出 。 。

。错误似乎与代码的更改无关,但这是唯一的一次更改,一次运行没有错误,而一次运行却有错误

在我看来,这个错误根本无法理解。

我曾尝试在numpy创建的数组中寻找dtype差异,但两种方法都相同。

0 个答案:

没有答案