Keep consistent order of eigenvalues and eigenvectors of successive eigenvalue/vector problems based on the inital ordering of eigenvalues from low to high by matching closest eigenvectors and eigenvalues.
Project description
eigenshuffle
Adapted from code by bmachiel, which in turn was based on matlab eigenshuffle.
Consistently sort eigenvalues and eigenvectors of a series of matrices based on initial ordering from low to high.
Includes eigenshuffle_eig and eigenshuffle_eigh for non-hermitian and hermitian matrices, respectively.
Installation
Install from pypi with:
pip install eigenshuffle
or clone repo and install with pip or directly install from GitHub with:
pip install git+https://github.com/ograsdijk/eigenshuffle
Example
import numpy as np
import numpy.typing as npt
import matplotlib.pyplot as plt
from eigenshuffle import eigenshuffle_eig
def eigenvalue_function(
t: float,
) -> npt.NDArray[np.floating]:
return np.array(
[
[1, 2 * t + 1, t**2, t**3],
[2 * t + 1, 2 - t, t**2, 1 - t**3],
[t**2, t**2, 3 - 2 * t, t**2],
[t**3, 1 - t**3, t**2, 4 - 3 * t],
]
)
tseq = np.arange(-1, 1.1, 0.1)
Aseq = np.array([eigenvalue_function(ti) for ti in tseq])
e, v = np.linalg.eig(Aseq)
es, vs = eigenshuffle_eig(Aseq)
# sorting original eig result from low to high
v[np.argsort(e)]
e = np.sort(e)
fig, ax = plt.subplots()
lines = ax.plot(tseq, e)
for i in range(es.shape[-1]):
ax.plot(tseq, es.real[:, i], "--", color=lines[i].get_color())
# for generating the legend
line1 = plt.Line2D([0, 1], [0, 1], linestyle="-", color="black")
line2 = plt.Line2D([0, 1], [0, 1], linestyle="--", color="black")
ax.set_xlabel("t")
ax.set_ylabel("eigenvalue")
ax.legend([line1, line2], ["sorted", "eigenshuffle"])
ax.grid()
Here the eigenvalues are consistently ordered, and are not switching positions after a level crossing (around t=0.3) when using eigenshuffle.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eigenshuffle-0.1.3.tar.gz.
File metadata
- Download URL: eigenshuffle-0.1.3.tar.gz
- Upload date:
- Size: 411.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1265b44ca1cfd0d8018ca31cba4021503a65ea0834f11ec785016f472921349
|
|
| MD5 |
4492cbcf89d4aef71160e4f2af8da290
|
|
| BLAKE2b-256 |
7071f27df9d959c43f9ad6c6f2d47517f662d84b58d9816a141e3096faf7b33b
|
File details
Details for the file eigenshuffle-0.1.3-py3-none-any.whl.
File metadata
- Download URL: eigenshuffle-0.1.3-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
966e16c738816321f6ff795697a11bcd6a8d3fe1a10b96137de5da9ae6f125da
|
|
| MD5 |
b31dfcfcfe7eef692ebc3503cb831cab
|
|
| BLAKE2b-256 |
c1a1fe9d10b04032a771d5b1ff2864ef7e7db805481424cc53ac76ad0f6025b5
|