Skip to main content

Python versions on PyPI CeNTREX-TlF version on PyPI Code style: black

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()

consistenly sorted eigenvalues
Here the eigenvalues are consistently ordered, and are not switching positions after a level crossing (around t=0.3) when using eigenshuffle.

Release files for eigenshuffle 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eigenshuffle 0.1.3
File Size Uploaded
eigenshuffle-0.1.3.tar.gz 411.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eigenshuffle 0.1.3
File Interpreter ABI Platform
eigenshuffle-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size:417.1 kB

Release files / eigenshuffle-0.1.3.tar.gz

Download URL eigenshuffle-0.1.3.tar.gz
Size 411.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e1265b44ca1cfd0d8018ca31cba4021503a65ea0834f11ec785016f472921349
BLAKE2b-256 checksum
How to use checksums
7071f27df9d959c43f9ad6c6f2d47517f662d84b58d9816a141e3096faf7b33b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.6

Release files / eigenshuffle-0.1.3-py3-none-any.whl

Download URL eigenshuffle-0.1.3-py3-none-any.whl
Size 5.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
966e16c738816321f6ff795697a11bcd6a8d3fe1a10b96137de5da9ae6f125da
BLAKE2b-256 checksum
How to use checksums
c1a1fe9d10b04032a771d5b1ff2864ef7e7db805481424cc53ac76ad0f6025b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.6

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page