我有一个numpy数组(4,4,6890),它基本上存储包含6890个4x4矩阵。我需要反转所有这些并且我目前正在进行循环,我知道这是一种不好的做法
for i in range(0, T.shape[2]):
T_inv[:,:,i] = np.linalg.inv(T[:,:,i])
如何通过一次通话完成?
答案 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 ]
A
,B
,C
是相同大小的矩阵(例如4x4),A^(-1)
,B^(-1)
,C^(-1)
,是他们的逆转。 I
是一个统一矩阵。
那么,这告诉我们什么?我们可以构造一个大的稀疏块对角矩阵,其中所有子矩阵(4x4)都在对角线上,取得那个大矩阵的逆矩阵,然后从对角线读出子矩阵的逆块。