鑑於包含k
子列表的列表,請讓 A={{a1,a2,a3,...},{b1,b2,b3,...},...}
,我想按Total[A[i]]
排序這些子列表。有沒有任何有效的方法來做到這一點?如何使用Mathematica將N個列表中的元素總和排序?
回答
注意,在許多情況下,排序依據Ordering
可以比SortBy
更快,因爲它使我們能夠利用矢量。在這種特殊情況下,加速並不是很大:
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
但是,這是因爲Total
是一個內置的功能。引入SortBy
的全部原因是效率(即,對於單個比較函數,對於幾個比較函數作爲繫帶破壞者,也是方便的)。 Sort
更有效率,因爲它更具體,因此在主評估序列中通過了更多步驟。但是,SortBy
無法利用排序所基於的函數的可列表性(向量化本質) - 它將逐一應用於列表元素。訂購的解決方案明確地利用排序功能的整個銷售計算的可能性(在這種情況下,Total[#,{2}]&
這樣做),因此速度更快。
如果,例如,該任務將是根據一個總在每個子列表中的第二,第三和第四元件的排序,我們會看到一個較大的性能差異:
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*Log[n]
對於長度爲n
的大列表成比例,並且這種複雜性將始終在那裏。
在文檔中檢查SortBy
列出了一系列排序列表的可能性。
SortBy[A,Total]
給出你所需要的。
編輯:低於每嚮導先生的評論,並在其中的鏈接解釋,
SortBy[A,{Total}]
更好。
@Mr Wizard在前幾天評論了另一個排序問題,看起來'SortBy [A,{Total}]'會稍微快一點。 – 2012-01-17 06:13:55
謝謝@Mike。很有意思;這聽起來像是一個老式的Mr.Wizard發現。你還記得這個問題或鏈接嗎? – kglr 2012-01-17 06:32:08
除了在過去的3-4天內不是非正式的,而是與排序有關的問題。現在得走了,否則我會尋找它。 – 2012-01-17 06:44:20
下應該工作(但我現在不能測試):
Sort[A, Total[#1]<Total[#2]&]
- 1. 如何使用Javascript遍歷n個排列的DOM元素
- 2. 如何按v2.3中的第n個元素對列表進行排序?
- 3. python heapq:如何使用列表列表中的第n個元素對堆進行排序?
- 4. 如何總結兩個列表N元素
- 5. 序言:k元素與元素總和的排列S
- 6. 排序列表,忽略每個第n個元素?
- 7. 如何在Python中遞歸排列列表中的n個元素?
- 8. 列表:用於元組中第n個元素的使用
- 9. Mathematica - 列表中的StringMatch元素?
- 10. 如何使用LinQ獲取列表的前N個元素?
- 11. 如何將N個元素添加到列表中?
- 12. 如何使用python list comprehensions更改列表列表中的第n個元素?
- 13. 如何使列表中的特定元素的總和?
- 14. 給出行和列總和約束下的N×N矩陣的元素 - Mathematica或Matlab
- 15. 如何測試元素使用javascript排序在列表中?
- 16. 元組中的R以下的Mathematica元組[列表中,n]
- 17. r-concatenate列表中的n個元素
- 18. python如何從列表中刪除元素的排序列表?
- 19. 列表中的元素的總和
- 20. 將元素插入排序列表
- 21. 如何反覆將元素插入排序列表中快速
- 22. 如何在PHP中排除元素表單數組的總和?
- 23. 具體算法排序n個元素
- 24. 如何將具有兩組元素的列表排序爲兩個按字母順序排列的列表
- 25. 如何使用m個元素從n個列表中列出每個元素的組合? (Python)
- 26. 使用列表元素的總和查找列表的索引
- 27. 列表中周圍元素的總和
- 28. Jinja 2中列表的總和元素
- 29. 如何選擇上使用XPath從元素列表病房第n個元素
- 30. 如何使用jQuery排除無序列表中的最後一個元素
很酷的提示。謝謝。 :) – 2012-01-19 01:54:34