Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 在3D矩阵上播放linalg.pinv_Python_Numpy_Matrix_Linear Algebra_Matrix Inverse - Fatal编程技术网

Python 在3D矩阵上播放linalg.pinv

Python 在3D矩阵上播放linalg.pinv,python,numpy,matrix,linear-algebra,matrix-inverse,Python,Numpy,Matrix,Linear Algebra,Matrix Inverse,在下面的示例中,有一个大小为(4、3、3)的3d矩阵。如何计算这些3*3矩阵中4个矩阵的pinv,而不使用numpy中的循环 dt = np.dtype(np.float32) a=[[[12,3,1], [2,4,1], [2,4,2],], [[12,3,3], [2,4,4], [2,4,5],], [[12,3,6], [2,4,5], [2,4,4],], [[12,3,3], [2,4,5], [2,4,6]]]

在下面的示例中,有一个大小为(4、3、3)的3d矩阵。如何计算这些3*3矩阵中4个矩阵的pinv,而不使用numpy中的循环

dt = np.dtype(np.float32)

a=[[[12,3,1],
   [2,4,1],
   [2,4,2],],
   [[12,3,3],
   [2,4,4],
   [2,4,5],],
   [[12,3,6],
   [2,4,5],
   [2,4,4],],
   [[12,3,3],
   [2,4,5],
   [2,4,6]]]

a=np.asarray(a,dtype=dt)
print(a.shape)

apinv=np.zeros((4,3,3))
print(np.linalg.pinv(a[0,:,:]).shape)

for i in range(4):
   apinv[i,:,:]=np.linalg.pinv(a[i,:,:])
请注意,linalg.inv通过矩阵进行广播,如下所述:


但pinv的工作方式不同。

一种解决方案是使用map和lambda函数:

apinv = map(lambda n: np.linalg.pinv(n), a)
apinv = np.asarray(apinv,dtype=dt)

谢谢您知道使用theano的任何类似解决方案吗?很高兴它奏效了。对不起,我还没有使用
theano
的经验。不用担心。这里提供了一个解决方案:
apinv = map(lambda n: np.linalg.pinv(n), a)
apinv = np.asarray(apinv,dtype=dt)