如何有效地对子数组进行操作,例如计算行列式、逆、

How to efficiently operate on sub-arrays like calculating the determinants, inverse,

我必须对子数组进行多项操作,例如矩阵求逆或构建行列式。由于 for 循环在 Python 中不是很快,我想知道最好的方法是什么。

import numpy as np
n = 8
a = np.random.rand(3,3,n)
b = np.empty(n)
c = np.zeros_like(a)

for i in range(n):
    b[i] = np.linalg.det(a[:,:,i])
    c[:,:,i] = np.linalg.inv(a[:,:,i])

那些 numpy.linalg 函数将接受 n-dim 数组,只要最后两个轴是形成 2D 切片的轴,函数将沿着这些切片进行操作。因此,为了解决我们的问题,将轴置换为 bring-up 作为第一个迭代轴,执行所需的操作,如果需要,push-back 该轴回到原来的位置。

因此,我们可以获得这些输出,就像这样 -

b = np.linalg.det(np.moveaxis(a,2,0))
c = np.moveaxis(np.linalg.inv(np.moveaxis(a,2,0)),0,2)