---
title: linalg.eigh
description: "返回复埃尔米特（共轭对称）或实对称矩阵的特征值和特征向量。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0554.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0554.html
indexId: e0f38b5b6da677c6e3a9a118c715ccb542b76812ad7e60424d59e4c54a5551e476
---
# linalg.eigh

#### 功能描述

返回复埃尔米特（共轭对称）或实对称矩阵的特征值和特征向量。

返回两个对象，一个包含a特征值的1维数组，以及相应特征向量（以列为单位）的二维正方形数组或矩阵（取决于输入类型）。


#### 必选输入参数

| 参数名 | 类型 | 说明 |
| --- | --- | --- |
| a | (…, M, M) array | 埃尔米特矩阵或实对称矩阵。 |


#### 可选输入参数

| 参数名 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| UPLO | {‘L’, ‘U’}, | ‘L’ | 指定计算是用a的下三角部分（“L”）还是上三角形部分（“U”）完成。无论这个值如何，在计算中只考虑对角线的实际部分，以保留埃尔米特矩阵的概念。因此，对角线的虚部将始终被视为零。 |


#### 返回数据

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| w | (…, M) ndarray | 特征值按升序排列，每个特征值根据其多重性重复。 |
| v | {(…, M, M) ndarray, (…, M, M) matrix} | 列v[:,i]是与特征值w[i]相对应的归一化特征向量。如果a是矩阵对象，将返回矩阵对象。 |


#### 示例

```
>>> import numpy as np
>>> # 向量输入
>>> a = np.array([[1,-2j], [2j, 5]])
>>> a
array([[ 1.+0.j, -0.-2.j],
[ 0.+2.j,  5.+0.j]])
>>> w, v = np.linalg.eigh(a)
>>> w, v
(array([0.17157288, 5.82842712]), array([[-0.92387953-0.j        , -0.38268343+0.j        ],
[ 0.        +0.38268343j,  0.        -0.92387953j]]))
>>>
>>> np.dot(a, v[:, 0]) - w[0] * v[:, 0]
array([5.55111512e-17+0.0000000e+00j, 0.00000000e+00+1.2490009e-16j])
>>> np.dot(a, v[:, 1]) - w[1] * v[:, 1]
array([0.+0.j, 0.+0.j])
>>>
>>> # 矩阵输入
>>> A = np.matrix(a)
>>> A
matrix([[ 1.+0.j, -0.-2.j],
[ 0.+2.j,  5.+0.j]])
>>> w, v = np.linalg.eigh(A)
>>> w; v
array([0.17157288, 5.82842712])
matrix([[-0.92387953-0.j        , -0.38268343+0.j        ],
[ 0.        +0.38268343j,  0.        -0.92387953j]])
>>>
>>> # 对角线虚部处理
>>> a = np.array([[5+2j, 9-2j], [0+2j, 2-1j]])
>>> a
array([[5.+2.j, 9.-2.j],
[0.+2.j, 2.-1.j]])
>>> b = np.array([[5.+0.j, 0.-2.j], [0.+2.j, 2.-0.j]])
>>> b
array([[5.+0.j, 0.-2.j],
[0.+2.j, 2.+0.j]])
>>>
>>> np.linalg.eigh(a)
(array([1., 6.]), array([[-0.4472136 -0.j        , -0.89442719+0.j        ],
[ 0.        +0.89442719j,  0.        -0.4472136j ]]))
>>>
>>> np.linalg.eigh(b)
(array([1., 6.]), array([[-0.4472136 -0.j        , -0.89442719+0.j        ],
[ 0.        +0.89442719j,  0.        -0.4472136j ]]))
>>>
```
