尝试反转2D矩阵数组时出现问题

时间:2019-03-04 13:45:35

标签: python numpy matrix-inverse

我有一个关于矩阵4x4求逆的简单问题,尤其是当我尝试对integ_prec索引(此处的integ_prec = 6dimBlocks = 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]是否正确?

致谢

0 个答案:

没有答案