簡體   English   中英

同時對一維數組和二維數組排序(按列)

[英]Sort a 1D array and a 2D array(by column) simultaneously

我有兩個數組,一個名為Amplitudes(形狀為(99,))的一維數組和一個名為Modes(形狀為(55714,99))的2D數組。 我想對這兩個數組進行排序,以使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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM