【问题标题】:broadcasting linalg.pinv on a 3D matrix在 3D 矩阵上广播 linalg.pinv
【发布时间】:2015-12-03 18:43:24
【问题描述】:

在下面的示例中,有一个大小为 (4, 3, 3) 的 3d 矩阵。如何在numpy中计算没有循环的3 * 3矩阵中的每一个的pinv?

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 通过矩阵广播,正如here 所述:

print(np.linalg.inv(a).shape)

但它对 pinv 的工作方式不同。

【问题讨论】:

    标签: python numpy matrix linear-algebra matrix-inverse


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!您知道使用 theano 的任何类似解决方案吗?
    • 很高兴它成功了。抱歉,我还没有使用 theano 的经验。
    • 不用担心。这里提供了一个解决方案:stackoverflow.com/questions/34090846/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多