Einsum создает переполнение. Зачем? - PullRequest
0 голосов
/ 03 мая 2019

Вот код, который работает:

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 с наивным методом и B сМетод einsum содержит те же элементы, но когда я его использую, следующий код не имеет того же значения и выдает предупреждение:

RuntimeWarning: переполнение обнаружено при умножении

RuntimeWarning: возникло переполнениев дополнения .,.

.Ошибки, похоже, не связаны с изменением кода, но это единственное, что меняется от одного запуска без ошибок и одного с ошибками

На мой взгляд, эта ошибка вообще не понятна.

I 'мы пытались найти разницу dtype в массиве, созданном numpy, но они одинаковы в обоих подходах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...