分位數就是 可以 將 數據 等分 若干份的 數
成都創新互聯公司專注于姜堰企業網站建設,成都響應式網站建設公司,電子商務商城網站建設。姜堰網站建設公司,為姜堰等地區提供建站服務。全流程定制開發,專業設計,全程項目跟蹤,成都創新互聯公司專業和態度為您提供的服務
一組數據
從小到大排序后
運行結果
使用python找到一列數的中位數并輸出的代碼示例如下,只有9行代碼:
import random;
N=9;lst=[
random.randint(0,100)
for i in range(N)];
lst.sort();
l=len(lst);
print("sorted:",lst);
print("median:",
sum(lst[((l-1)//2):(l//2+1)])/2);
# coding=gbk
import numpy as np
inputStr = input("請輸入多個整數,以空格分隔:")
# 使用列表推導式將輸入的內容以空格分隔,如果有小數,則通過int函數變為整數
input_lists = [int(num) for num in inputStr.split(" ")]
# 通過sort方法,并使用參數reverse=True,來將列表的數據以降序排列
input_lists.sort(reverse=True)
# 由于通過",".join()連接的列表不能有整數元素,所以通過列表推導式將列表每個元素通過str轉為字符串后,再聯接為以逗號分隔的字符串
print(",".join([str(num) for num in input_lists]))
# 使用numpy的median函數來得到中位數
print(np.median(input_lists))
題目:中位數就是一組數據從小到大排列后中間的那個數字。如果數組長度為偶數,那么中位數的值就是中間兩個數字相加除以2,如果數組長度為奇數,那么就是中間那個數。
分析:采用類快速排序的方法,把問題轉化為求一列數中第i小的數的問題,求中位數就是求一列數的第(len(arr)/2 + 1)小的數的問題)。
當使用依次類快速排序算法后,分割元素的下標為pos:
(1)當pos len(arr) / 2時,說明中位數在數組左半部分,在左半部分繼續查找。
(2)當pos == len(arr) / 2,說明找到中位數arr[pos]。
(3)當pos len(arr) / 2, 說明中位數在數組右半部分,在右半部分繼續查找。
以上默認此數組序列長度為奇數,如果為偶數就是調用上述方法兩次查找中間的兩個數,再求平均。
code:
def partition(arr, low, high):
key = arr[low]
while low high:
? ? while low high and arr[high] key:
? ? ? ? high -= 1
? ? arr[low] = arr[high]
? ? while low high and arr[low] key:
? ? ? ? low += 1
? ? arr[high] = arr[low]
arr[high] = arr[low]
arr[low] = key
pos = low
return pos
def getMid(arr):
low = 0
high = len(arr) - 1
mid = low + (high - low) 1
while low high:
? ? # 以arr[low] 為基準把數組分成兩部分
? ? pos = partition(arr, low, high)
? ? if pos == mid:? # 找到中位數
? ? ? ? break
? ? elif pos mid:? # 繼續在右半部分查找
? ? ? ? high = pos - 1
? ? else:? # 繼續在左半部分查找
? ? ? ? low = pos + 1
# 如果數組長度為奇數,中位數為中間的元素,否則就是中間兩個數的平均值
return arr[mid] if (len(arr) % 2) != 0 else (arr[mid] + arr[mid + 1]) / 2
if __name__ == "__main__":
arr = [7, 5, 3, 1, 2,? 11, 9]
print(getMid(arr))
程序的運行結果為:6
當前標題:函數中位數python 中位數是哪個函數
本文網址:http://vcdvsql.cn/article8/hpgiop.html
成都網站建設公司_創新互聯,為您提供定制開發、微信小程序、電子商務、移動網站建設、動態網站、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯