Проблема при попытке инвертировать массив 2D матрицы - PullRequest
0 голосов
/ 04 марта 2019

У меня есть простой вопрос об инверсии матрицы 4x4, особенно когда я пытаюсь сделать это с циклом по integ_prec индексам (integ_prec = 6 здесь и dimBlocks = 4).

Здесьфрагмент кода:

      # Declaration of inverse cross matrix
      invCrossMatrix = np.zeros((dimBlocks,dimBlocks,integ_prec,integ_prec))

      # Build observables covariance matrix
      arrayFullCross_vec = buildObsCovarianceMatrix_vec(k_ref, mu_ref, ir)

      # Invert 4x4 covariance matrix
      for r_p in range(integ_prec):
        for s_p in range(integ_prec):
          invCrossMatrix[:][:][r_p][s_p] = np.linalg.inv(arrayFullCross_vec[:][:][r_p][s_p])

Функция buildObsCovarianceMatrix_vec возвращает массив 4D:

def buildObsCovarianceMatrix_vec(k_ref, mu_ref, ir):
arrayCrossTemp = np.zeros((dimBlocks,dimBlocks,integ_prec,integ_prec))

... processing

return arrayCrossTemp

Но я получаю систематическую ошибку, когда происходит инверсия:

File "GC_forecast_8bins_base_Mpc_DESI_dev.py", line 1345, in integ_LU_cross
    function_A = aux_fun_LU_cross_vec(ecs, way, I1[0], I1[1], I1[2])
  File "GC_forecast_8bins_base_Mpc_DESI_dev.py", line 1216, in aux_fun_LU_cross_vec
    invCrossMatrix[r_p][s_p][:][:] = np.linalg.inv(arrayFullCross_vec[:][:][r_p][s_p])
  File "/Users/fab/Library/Python/2.7/lib/python/site-packages/numpy/linalg/linalg.py", line 551, in inv
    ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
  File "/Users/fab/Library/Python/2.7/lib/python/site-packages/numpy/linalg/linalg.py", line 97, in _raise_linalgerror_singular
    raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix

С другой версией моего кода (со скалярными значениями) все работает нормально.

Я ожидаю инвертировать матрицу 4x4 на каждой итерации цикла.

Правильно ли синтаксис nvCrossMatrix[:][:][r_p][s_p] = np.linalg.inv(arrayFullCross_vec[:][:][r_p][s_p]?

С уважением

...