Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试反转二维矩阵数组时出现问题_Python_Numpy_Matrix Inverse - Fatal编程技术网

Python 尝试反转二维矩阵数组时出现问题

Python 尝试反转二维矩阵数组时出现问题,python,numpy,matrix-inverse,Python,Numpy,Matrix Inverse,关于矩阵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

关于矩阵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])
函数
buildobscovariacematrix\u 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矩阵


语法是否正确一次反转所有矩阵,无需循环。如果你得到
numpy.linalg.linalgeror:Singular matrix
是因为数组中有一个或多个矩阵是奇异的(不可逆的)。你必须决定在这些情况下要做什么(或者修复生成矩阵的函数,如果这些矩阵都是可逆的)。@jdehesa不应该将
arrayFullCross\u vec
重新格式化为
(r\u p,s\u p,4,4)
以应用广播?啊,等等,不,问题肯定是语法,
nvCrossMatrix[:][r\u p][s\p]=np linalg.inv(arrayFullCross\u vec[:][r\u p][s_p]
不正确,它可能是
nvCrossMatrix[:,:,r_p,s_p]=np.linalg.inv(arrayFullCross_vec[:,:,r_p,s_p]
@brella对,我没有意识到矩阵维数是前两个,谢谢。是的,你可以做
np.linalg.inv(arrayFullCross_vec.transpose(2,3,0,1))。转置(2,3,0,1)
.Bare
[:]
什么都不做。你可以做
np.linalg.inv(arrayFullCross\u vec)
一次反转所有矩阵,而不需要循环。如果你得到
numpy.linalg.linalgeror:Singular matrix
是因为有一个或多个矩阵是奇异的(不可逆的)在你的数组中。你必须决定在这些情况下要做什么(或者修复生成矩阵的函数,如果这些矩阵都是可逆的)。@jdehesa不应该
arrayFullCross\u-vec
被重塑为
(r\p,s\p,4,4)
为了应用广播?啊,等等,不,问题肯定是语法,
nvCrossMatrix[:][:][r_p][s_p]=np.linalg.inv(arrayFullCross_vec[:][:][r_p][s_p]
不正确,它应该是
nvCrossMatrix[:,:,r_p,s_p]=np.linalg.inv
@Brella好的,我不知道矩阵维数是前两个,谢谢。是的,你可以做
np.linalg.inv(arrayFullCross\u vec.transpose(2,3,0,1))。transpose(2,3,0,1)
.Bare
[:]
什么都不做。