次のような配列xがあり(実際に使用するデータはもっと大きい),そのデータから次のソースコードで得られる結果resul1,result2を得たいです.実際のデータにおいても配列x[0],x[1]...はそれぞれソートされているものとします.
得たい結果は
- xの全要素をソートした結果のうち5以下のものからなる配列result1
- result1の要素がxの何番目の要素であったかを表す配列result2
です.
次のソースコードを用いても欲しい結果は得られますが,扱うデータが巨大なため,実行に時間がかかりすぎてしまいます.
リスト内包表記を用いる方法など,何か高速な方法はありますでしょうか?
扱うデータ
python
1import numpy as np 2 3a = np.array([1, 2.3, 3.1, 4.6, 6.7]) 4b = np.array([2.3, 4.2]) 5c = np.array([]) 6d = np.array([2.5, 3.2, 4.3, 4.4, 4.8, 5.0]) 7x = [a, b, c, d]
自作コード
python
1import numpy as np 2 3result1 = [] 4result2 = [] 5append1 = result1.append 6append2 = result2.append 7 8while True: 9 value = 6 10 for i in range(len(x)): 11 if x[i].size and value > x[i][0]: 12 value = x[i][0] 13 index = i 14 15 if value > 5: 16 break 17 18 append1(value) 19 append2(index) 20 x[index] = np.delete(x[index], 0)
自作コードで得られる結果かつ得たい結果
result1=[1.0, 2.3, 2.3, 2.5, 3.1, 3.2, 4.2, 4.3, 4.4, 4.6, 4.8, 5.0]
result2=[0, 0, 1, 3, 0, 3, 1, 3, 3, 0, 3, 3]
以前にも似たような質問をさせていただきましたが,xのそれぞれの要素x[0],x[1]...がソート済みであると明示せずに,質問させていただいたので,ソート済みであればより早い方法があるのではないかと思い質問させていただきました.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 05:42
退会済みユーザー
2021/10/12 06:31