在python中创建模块以对齐矩阵

时间:2014-11-10 07:20:37

标签: python matrix module python-module

例如,我有一个 Hermitian矩阵,A ,我对角线矩阵B 为:

A11= -0.0034
A12=  -0.007 -1j*0.0098 
A13=  -0.0112 - 1j*0.0712 
A21= A12.conjugate()
A22=  0.2162
A23=  1.062 - 1j*0.0584
A31= A13.conjugate()
A32= A23.conjugate()
A33=  2.462

A= matrix([[A11,A12,A13],[A21,A22,A23],[A31,A32,A33]])

eigenvalues_of_A, eigenvectors_of_A = numpy.linalg.eig(A);
B = eigenvectors_of_A[:,abs(eigenvalues_of_A).argsort()]          

diagonal_matrix= B.I * A * B

这是直截了当的。

我想要的是创建模块。假设我将在现有的python脚本中输入100个不同的 Hermitian矩阵导入 模块来计算100个不同的 B矩阵< / strong>(对于每个不同的输入)。

编辑(让我的问题更加通用)

原因:创建模块的原因是更广泛地使用它。一般来说,我的意思是,在单个python脚本中,我有不同类型的矩阵(例如,Hermitian矩阵,实矩阵,一般复矩阵);现在不同类型矩阵的对角化是不同的。所以我想创建一个模块(根据矩阵的类型包含不同的对角化过程),并在需要对任何矩阵进行对角化时调用它。

忏悔:我不知道如何创建模块。

1 个答案:

答案 0 :(得分:1)

您可以使用字典使用for循环存储100个输入 Hermitian矩阵

input_dict={}
for i in range(100):
    new_A = matrix([[A11,A12,A13],[A21,A22,A23],[A31,A32,A33]]) # new input matrix (A)
    input_dict[i] = new_A

之后使用另一个字典存储100个 B矩阵

B_matrices={}
for i in input_dict.keys():
    eigenvalues_of_A, eigenvectors_of_A = numpy.linalg.eig(input_dict[i]);
    B = eigenvectors_of_A[:,abs(eigenvalues_of_A).argsort()]          
    B_matrices[i] = B 

现在,input_matrix[i]为您提供第i个输入矩阵B_matrices[i]为您提供相应的 B矩阵

您可以为对角矩阵创建一个模块:

def diagonalize(A):
    eigenvalues_of_A, eigenvectors_of_A = numpy.linalg.eig(A);
    B = eigenvectors_of_A[:,abs(eigenvalues_of_A).argsort()]         
    diagonal_matrix= B.I * A * B
    return diagonal_matrix

现在称之为:

diagonal_matrix = diagonalize(A)