这是有效的代码:
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差异,但两种方法都相同。