有沒有類似numpy.argmin(x)
,但是中位數?有沒有辦法在一個命令中獲取python中位數的索引?
4
A
回答
5
快速逼近:
numpy.argsort(data)[len(data)//2]
1
您可以使用元素(zip
)保留索引並對中間的中間或兩個元素上的元素進行排序並返回,但排序將爲O(n.logn)
。就時間複雜度而言,以下方法是O(n)
。
import numpy as np
def arg_median(a):
if len(a) % 2 == 1:
return np.where(a == np.median(a))[0][0]
else:
l,r = len(a)/2 -1, len(a)/2
left = np.partition(a, l)[l]
right = np.partition(a, r)[r]
return [np.where(a == left)[0][0], np.where(a==right)[0][0]]
print(arg_median(np.array([ 3, 9, 5, 1, 15])))
# 1 3 5 9 15, median=5, index=2
print(arg_median(np.array([ 3, 9, 5, 1, 15, 12])))
# 1 3 5 9 12 15, median=5,9, index=2,1
輸出:
2
[2, 1]
我們的想法是,如果僅存在一箇中間值(陣列具有奇數長度),則返回值的索引。如果我們需要平均到元素(數組有長度),那麼它返回列表中這兩個元素的索引。
1
看來老問題,但我發現了一個很好的方法,使之如此:
import random
import numpy as np
#some random list with 20 elements
a = [random.random() for i in range(20)]
#find the median index of a
medIdx = a.index(np.percentile(a,50,interpolation='nearest'))
這裏的絕招是最近插值百分內置選項,從列表中返回一個「真實」中值,因此之後搜索它是安全的。
+0
接受的答案'numpy.argsort(data)[len(data)// 2]'是3-4倍的速度,但這個仍然是優雅的:) – leermeester
相關問題
- 1. 有沒有辦法從c#中的變量中獲取命令?
- 2. 有沒有辦法在Fluent nHibernate中命名唯一索引?
- 3. 有沒有辦法從Repeater中的DataTable獲取Item的索引?
- 4. 有沒有辦法獲得多個列表python的索引?
- 5. 有沒有辦法在Slick中創建一個聚類索引?
- 6. 有沒有辦法從庫中讀取命令行參數?
- 7. 有沒有辦法在命令行中輸入一個Python程序列表?
- 8. 有沒有辦法在遍歷Meteor中的集合時獲取索引?
- 9. 有沒有辦法在python中自動定義一個函數?
- 10. 有沒有辦法將列表中的索引合併在一個列表中
- 11. 有沒有辦法在C#中的LINQ Where方法中捕獲索引值?
- 12. 有沒有辦法通過枚舉在Rust中索引數組?
- 13. 有沒有辦法在KendoUI網格中索引數字
- 14. 有沒有辦法通過索引獲取jQueryUI標籤元素?
- 15. 有沒有辦法將兩個mongo集合索引到ElasticSearch中的一箇中?
- 16. 有沒有辦法通過在Python中搜索它的位置來獲取列表中的項目
- 17. 有沒有辦法在彈性搜索索引中設置ttl
- 18. 有沒有辦法在Azure搜索索引中「過期」項目?
- 19. 有沒有辦法從Marklogic通用索引獲取索引單詞列表
- 20. 有沒有辦法檢查二維數組中的索引/位置?爲Java
- 21. 有沒有辦法檢索Eclipse執行的git命令?
- 22. 有沒有什麼辦法檢索命令的插入行
- 23. 有沒有辦法在django python中捕獲500個錯誤?
- 24. 有沒有辦法在java中獲取數組的名稱?
- 25. 有沒有辦法訪問一個向量內的索引
- 26. 有沒有辦法從一個multimap中的值中獲取所有的鍵?
- 27. 有沒有辦法從函數返回的數組中獲取一個元素?
- 28. 有沒有辦法從Eclipse執行一個linux命令
- 29. 有沒有辦法讓JavaScript執行一個PHP命令?
- 30. 有沒有辦法在MySQL中禁止未索引的查詢?
鑑於谷歌*「numpy median」*容易得到結果,我將不得不假設你根本沒有做過任何研究。 – jonrsharpe
標題應該是「在Python中」而不是「在numpy」中。我無法使用谷歌找到它。 –
我可以做np.argmin(np.abs(np.median(x) - x)),但想知道是否已經有命令。 –