二维数组的对角化
我需要对很多矩阵进行对角化处理。虽然这些矩阵本身都很小(比如说是 a x a 的矩阵,其中 a 小于等于 10),但因为数量实在太多了,使用 for 循环和 numpy.linalg.eig
函数来逐个处理会花费很多时间。所以我想把这些矩阵放到一个数组里,也就是一个二维数组的数组,但不幸的是,Python 似乎把这个二维数组的数组当成了三维数组,这让它很困惑,结果就不愿意执行这个操作。那么,有没有办法让 Python 不把这个二维数组的数组看成三维数组呢?
谢谢,
一位 Python 新手
补充说明:为了更清楚,我并不是特别想要这个三维数组本身。因为一般来说,把一个数组传给一个函数的速度比用 for 循环一个一个传要快得多,所以我只是想把所有需要对角化的矩阵放在一个数组里。
1 个回答
1
如果你有一个三维数组,比如:
a = np.random.normal(size=(20,10,10))
那么你可以通过下面的方式来遍历所有20个10x10的数组:
for k in xrange(a.shape[0]):
b = np.linalg.eig(a[k,:,:])
在这里,你可以用更复杂的方式来保存b。也许你现在就是这么做的,但你不能直接对三维数组使用np.linalg.eig
,让它沿着某个方向计算,所以除非有办法把所有的数组合并成一个二维数组,不然你只能用循环。不过,我怀疑这样做会比直接遍历每个二维数组更快。