gpt4 book ai didi

python - 在 Numpy 中向量化特征值计算

转载 作者:太空狗 更新时间:2023-10-30 01:08:49 26 4
gpt4 key购买 nike

我想要一种 numpy-sh 方法来向量化特征值的计算,这样我就可以为它提供一个矩阵矩阵,它会返回相应特征值的矩阵。

例如,在下面的代码中,B 是由 3x3 矩阵 A 的 4 个副本组成的 block 6x6 矩阵。C 是我希望看到的输出,即维数 (2,2,3) 的数组(因为 A 有 3 个特征值)。

这当然是一个非常简化的例子,在一般情况下矩阵 A 可以有任何大小(尽管它们仍然是正方形),矩阵 B 不一定由 A 的副本组成,但不同的 A1、A2 等(所有大小相同但包含不同的元素)。

import numpy as np
A = np.array([[0, 1, 0],
[0, 2, 0],
[0, 0, 3]])
B = np.bmat([[A, A], [A,A]])
C = np.array([[np.linalg.eigvals(B[0:3,0:3]),np.linalg.eigvals(B[0:3,3:6])],
[np.linalg.eigvals(B[3:6,0:3]),np.linalg.eigvals(B[3:6,3:6])]])

最佳答案

编辑:如果您使用的是 numpy >= 1.8.0 版本,则 np.linalg.eigvals 会在您使用的任何数组的最后两个维度上运行交给它,所以如果您将输入 reshape 为 (n_subarrays, nrows, ncols) 数组,您只需调用一次 eigvals:

import numpy as np

A = np.array([[0, 1, 0],
[0, 2, 0],
[0, 0, 3]])

# the input needs to be an array, since matrices can only be 2D.
B = np.repeat(A[np.newaxis,...], 4, 0)

# for arbitrary input arrays you could do something like:
# B = np.vstack(a[np.newaxis,...] for a in input_arrays)
# but for this to work it will be necessary for each element in
# 'input_arrays' to have the same shape

# eigvals will operate over the last two dimensions of the array and return
# a (4, 3) array of eigenvalues
C = np.linalg.eigvals(B)

# reshape this output so that it matches your original example
C.shape = (2, 2, 3)

如果您的输入数组并非都具有相同的维度,例如input_arrays[0].shape == (2, 2), input_arrays[1].shape == (3, 3) 等等 然后你只能向量化这个计算跨具有匹配维度的子集。

如果您使用的是旧版本的 numpy,那么不幸的是,我认为没有任何方法可以对多个输入数组的特征值计算进行矢量化 - 您只需要循环改为使用 Python 输入。

关于python - 在 Numpy 中向量化特征值计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com