【发布时间】:2014-09-17 11:54:04
【问题描述】:
所以我正在使用 NumPy 的线性代数例程来做一些基本的计算量子力学。假设我有一个矩阵,hamiltonian,我想要它的特征值和特征向量
import numpy as np
from numpy import linalg as la
hamiltonian = np.zeros((N, N)) # N is some constant I have defined
# fill up hamiltonian here
energies, states = la.eig(hamiltonian)
现在,我想按升序对能量进行排序,并且我想将状态与它们一起排序。例如,如果我这样做:
groundStateEnergy = min(energies)
groundStateIndex = np.where(energies == groundStateEnergy)
groundState = states[groundStateIndex, :]
我正确地绘制了基态(特征值最低的特征向量)。但是,如果我尝试这样的事情:
energies, states = zip(*sorted(zip(energies, states)))
甚至
energies, states = zip(*sorted(zip(energies, states), key = lambda pair:pair[0])))
以相同的方式绘制不再绘制正确的状态。那么我如何才能将状态与能量一起排序,但只能按行? (即,我想将每行状态与能量值相关联,并且我想重新排列行,以便行的顺序对应于能量值的排序顺序)
【问题讨论】:
-
你应该检查numpy.argsort
-
使用来自
numpy.argsort(energies)的索引对states数组进行排序。 -
所以,一旦我从 numpy.argsort(energies) 获得索引,我如何仅重新排列使用它们的状态行?
标签: python arrays sorting numpy