对存储在n维numpy数组中的所有矩阵的批处理操作

时间:2017-07-04 12:45:50

标签: python numpy

我有一个numpy数组(4,4,6890),它基本上存储包含6890个4x4矩阵。我需要反转所有这些并且我目前正在进行循环,我知道这是一种不好的做法

for i in range(0, T.shape[2]):
    T_inv[:,:,i] = np.linalg.inv(T[:,:,i])

如何通过一次通话完成?

2 个答案:

答案 0 :(得分:4)

override func viewDidLoad() { super.viewDidLoad() navigationItem.rightBarButtonItem = UIBarButtonItem( barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed) ) } 会这样做,但您需要重新排列轴:

np.linalg.inv

最好只构建 T_inv = np.moveaxis(np.linalg.inv(np.moveaxis(T, -1, 0)), 0, -1) 以便T。它也有助于广播。

答案 1 :(得分:0)

我不确定如何使用numpy,但请查看:

[ A 0 0 ]   [ A^(-1)    0        0   ]   [ I 0 0 ]
[ 0 B 0 ] * [   0     B^(-1)     0   ] = [ 0 I 0 ]
[ 0 0 C ]   [   0       0     C^(-1) ]   [ 0 0 I ]

ABC是相同大小的矩阵(例如4x4),A^(-1)B^(-1)C^(-1) ,是他们的逆转。 I是一个统一矩阵。

那么,这告诉我们什么?我们可以构造一个大的稀疏块对角矩阵,其中所有子矩阵(4x4)都在对角线上,取得那个大矩阵的逆矩阵,然后从对角线读出子矩阵的逆块。