2D阵列阵列的对角化

时间:2011-07-20 15:39:31

标签: python numpy

我需要对大量矩阵进行对角化。 这些矩阵本身非常小(比如a x a,其中a <= 10)但是由于 他们的绝对数字,使用for循环将对齐所有这些都需要花费大量时间 和numpy.linalg.eig功能。所以我想制作一个矩阵数组,即 一个2D数组的数组,但不幸的是,Python似乎认为这是一个三维数组,感到困惑,并拒绝做这项工作。那么,有没有办法阻止Python将这个2D数组数组视为3D数组呢?

谢谢,

Python新手

编辑:为了更清楚,我对这个3D数组本身不感兴趣。因为一般来说,将数组馈送到函数似乎比使用for循环逐个馈送所有元素要快得多,我只是尝试将所需的所有矩阵放在数组中对角化。

1 个答案:

答案 0 :(得分:1)

如果你有一个3D数组:

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应用于3D数组并让它沿着单个轴计算,所以除非有将所有你的所有结合起来的形式,否则你会陷入循环数组成一个2D数组。然而,我怀疑这比仅仅循环各个2D阵列更快。