我有两个数组,一个名为Amplitudes的形状为(99,)的一维数组,一个名为Modes的2D形状为(55714,99)的数组。我想对这两个数组进行排序,以使Modes数组的列根据Amplitudes进行排列。这样做实际上是为了找到主导模式。
Amplitudes_absolute是我的1D数组,而Modes_st是我的2D数组。两者均未分类。
Amplitudes_absolute.shape给(99,)Modes_st.shape给我(55714,99)
我想将排序模式的形状保留为(55714,99),但要根据Amplitudes_absolute的升序对列进行排序。
我试过了:
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
和
Amplitudes_absolute_sorted = np.sort(Amplitudes_absolute)
p = Amplitudes_absolute_sorted.argsort()
Modes_sorted = Modes_st[p]
两者都给了我错误的形状,就像在Modes_sorted.shape中给出了(99,99)而不是(55714,99)。
有没有办法进行这种分类?
你很亲近 第一种方法可以通过转置modes
数组来解决:
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]
请注意:
第一个索引的,因此我们正在重新排列列而不是行。另外,无需先排序amplitudes
,您可以直接使用argsort
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句