Python 同时对一维数组和二维数组(按列)排序

Python 同时对一维数组和二维数组(按列)排序,python,arrays,sorting,simultaneous,Python,Arrays,Sorting,Simultaneous,我有两个数组,一个一维数组称为带形状的振幅(99),一个二维数组称为带形状的模式(55714,99)。我想对这两个数组进行排序,使模式数组的列根据振幅排列。这实际上是为了找到主导模式 绝对振幅是我的一维阵列,绝对模式是我的二维阵列。两者都是未分类的 振幅_绝对值。形状给出(99,) 形态给了我(55714,99) 我想保留排序模式的形状为(55714,99),但列是根据振幅的升序值进行排序的 我试过: Amplitudes_absolute_sorted, Modes_sorted = [lis

我有两个数组,一个一维数组称为带形状的振幅(99),一个二维数组称为带形状的模式(55714,99)。我想对这两个数组进行排序,使模式数组的列根据振幅排列。这实际上是为了找到主导模式

绝对振幅是我的一维阵列,绝对模式是我的二维阵列。两者都是未分类的

振幅_绝对值。形状给出(99,) 形态给了我(55714,99)

我想保留排序模式的形状为(55714,99),但列是根据振幅的升序值进行排序的

我试过:

Amplitudes_absolute_sorted, Modes_sorted = [list(x) for x in     zip(*sorted(zip(Amplitudes_absolute, Modes_st), key=itemgetter(0)))]

Modes_sorted = np.squeeze(np.array(Modes_sorted)) #To obtain an array

两者都给了我一个错误的形状,就像在Modes_sorted.shape(99,99)和not(55714,99)中一样


有什么方法可以进行排序吗?

您非常接近。第一种方法可以通过变换
模式
数组来固定:

from operator import itemgetter
import numpy as np

_, modes_sorted = zip(*sorted(zip(amplitudes, modes.T), key=itemgetter(0)))
modes_sorted = np.array(modes_sorted)
这是因为当您迭代2D Numpy数组时,您会得到行,但需要列。您只获得了原始代码的前99行,因为
zip
在它接收的一个迭代器耗尽时停止

当然,使用Numpy更容易做到:

sorter = amplitudes.argsort()
modes_sorted = modes[:,sorter]

请注意第一个索引的
,因此我们正在重新排列列而不是行。此外,无需首先对振幅进行排序,您只需直接使用
argsort

效果很好!Danke schön!
sorter = amplitudes.argsort()
modes_sorted = modes[:,sorter]