k
サブリストを含むリストが与えられた場合、 A={{a1,a2,a3,...},{b1,b2,b3,...},...}
とし、サブリストをTotal[A[i]]
で並べ替えたいとします。これを行う効率的な方法はありますか?NリストをMathematicaで各リストの要素の総和でソートするにはどうすればいいですか?
答えて
注意。 Total
は組み込み関数であるため、これは、
In[50]:= test = RandomInteger[10,{5000000,5}];
In[54]:= (res1=SortBy[test,{Total}]);//Timing
(res2 = test[[Ordering[Total[test,{2}]]]]);//Timing
res1===res2
Out[54]= {1.422,Null}
Out[55]= {1.125,Null}
Out[56]= True
しかし、この特定のケースでは、スピードアップがその巨大ではありません。 SortBy
が導入された全理由は、効率性(つまり、単一の比較関数であり、いくつかの比較関数については、タイブレーカーとしても便利です)です。 Sort
がより具体的であるため、主評価手順ではより多くのステップをバイパスするので、より効率的です。しかし、SortBy
は、並べ替えの基になる関数の可能なリストアビリティ(ベクトル化された性質)を活用する方法がなく、リスト要素に1つずつ適用されます。順序付きの解法は、ソート関数の全面的な計算の可能性を明示的に活用します(この場合、Total[#,{2}]&
はこれを行います)。したがって、より高速です。
、我々は、より大きなパフォーマンスの違いを参照したい場合には、例えば、タスクは、各サブリストにおける第2、第3および第4要素の合計に応じてソートすることであろう。一般的に、
In[60]:= (res3=SortBy[test,{Total[#[[2;;4]]]&}]);//Timing
(res4=test[[Ordering[Total[test[[All,2;;4]],{2}]]]]);//Timing
res3==res4
Out[60]= {2.39,Null}
Out[61]= {1.11,Null}
Out[62]= True
をパフォーマンスの向上は、計算集約的でベクトル化されたソーティング関数にとって最大であり、リスト全体に適用するとはるかに高速です。ただし、ソートのパフォーマンス向上は、大規模なリストのソート機能自体の場合ほど大きくはないことに注意してください。これは長さがn
の大きなリストではn*Log[n]
に比例するソートの本質的な複雑さのためであり、この複雑さは常に存在します。
リスト内のリストを並べ替えることのできる範囲については、ドキュメントのSortBy
を参照してください。
SortBy[A,Total]
が必要です。
EDIT:パー氏ウィザードの以下のコメントと、その中のリンクで説明、
SortBy[A,{Total}]
が優れています。
@Mr Wizardは、先日別の並べ替えの問題についてコメントしました。これは、SortBy [A、{Total}] 'が少し速くなっているようです。 –
@ありがとうございます。とても興味深い;それはヴィンテージMr.Wizard発見のように聞こえる。質問やリンクを覚えていますか? – kglr
最後の3〜4日間であって、分類に関連する質問以外はお手数ではありません。私はそれを探します。 –
次は動作するはずです(私は今それをテストすることはできません):それは私たちがベクトル化を活用することができますので、多くの場合、Ordering
に基づいてソートすると、SortBy
より速くできること
Sort[A, Total[#1]<Total[#2]&]
- 1. Python - どのように各リストの4番目の要素でリストのリストをソートするのですか?
- 2. 要素が混在しているタプルのリストをソートするにはどうすればいいですか?
- 3. forループ操作でリストの各要素にアクセスするにはどうすればよいですか?
- 4. リストの各要素をschemeの関数に適用するにはどうすればよいですか?
- 5. 別のリストのリストに要素を追加するにはどうすればよいですか?
- 6. pythonリストから要素を削除しないで、オカレンスごとにリストをソートするにはどうすればいいですか?
- 7. リスト内のリスト内の要素を削除するにはどうすればよいですか?
- 8. 要素を1つのみ含むリストでリストする要素を持つリストを作成するにはどうすればよいですか?
- 9. リストの要素とJavaのマップの要素を比較するにはどうすればよいですか?
- 10. Mathematicaでリストのすべてのパーティションを取得するにはどうすればよいですか?
- 11. リスト要素を順序なしリストから削除するにはどうすればよいですか?
- 12. 新しいリストを作成せずにリスト内のn個の連続した要素を変更するにはどうすればよいですか?
- 13. Firebaseで要素/リストのサイズを取得するにはどうすればいいですか?
- 14. リストのリストを挿入ソートするにはどうすればよいですか?
- 15. ネストされたリストの各要素に関数を適用するにはどうすればよいですか?リストから
- 16. リストのリストを作成するにはどうすればよいですか?
- 17. 2つのリストから要素を削除するにはどうすればいいですか?
- 18. オブジェクトのリスト内で別々の要素を使用するにはどうすればよいですか?
- 19. OrderedDictsのリストで重複要素のインデックスを取得するにはどうすればよいですか?
- 20. Mathematicaでは、ルールとリストを含むパターンを見つけるにはどうすればよいですか?
- 21. ulリスト内の要素をソートできないようにするにはどうすればいいですか?
- 22. ティブル内のリストの要素を表示するにはどうすればいいですか?
- 23. グラフの隣接リストの要素を表示するにはどうすればいいですか?
- 24. XmlPullParserがトップレベル要素のリストを返すようにするにはどうすればよいですか?
- 25. リストの要素に基づいてファイルを検索するにはどうすればよいですか?
- 26. リスト要素をブートストラップナビバーの中央に配置するにはどうすればいいですか?
- 27. 'レンズ'がない場合、リストに要素を追加するにはどうすればいいですか?
- 28. PythonのリストでXML文字列要素をカウントするにはどうすればよいですか?
- 29. Python - リスト内のリストを単一のリストにマージするにはどうすればいいですか?
- 30. リストのリストを一連のリストに変換するにはどうすればいいですか?
クールなヒント。ありがとう。 :) –