Tôi đã đăng giải pháp của mình tại Python triển khai thuật toán "trung bình của trung vị", nhanh hơn một chút so với sử dụng sort[]. Giải pháp của tôi sử dụng 15 số trên mỗi cột, với tốc độ ~5N, nhanh hơn tốc độ ~10N khi sử dụng 5 số trên mỗi cột. Tốc độ tối ưu là ~4N, nhưng tôi có thể sai về nó
Theo yêu cầu của Tom trong nhận xét của anh ấy, tôi đã thêm mã của mình vào đây để tham khảo. Tôi tin rằng phần quan trọng đối với tốc độ là sử dụng 15 số trên mỗi cột, thay vì 5
#!/bin/pypy
#
# TH @stackoverflow, 2016-01-20, linear time "median of medians" algorithm
#
import sys, random
items_per_column = 15
def find_i_th_smallest[ A, i ]:
t = len[A]
if[t M }
# 6. find which above set has A's i-th smallest, recursively.
#
P1 = [ j for j in A if j < M ]
if[i < len[P1]]:
return find_i_th_smallest[ P1, i]
P3 = [ j for j in A if j > M ]
L3 = len[P3]
if[i < [t - L3]]:
return M
return find_i_th_smallest[ P3, i - [t - L3]]
# How many numbers should be randomly generated for testing?
#
number_of_numbers = int[sys.argv[1]]
# create a list of random positive integers
#
L = [ random.randint[0, number_of_numbers] for i in range[0, number_of_numbers] ]
# Show the original list
#
# print L
# This is for validation
#
# print sorted[L][int[[len[L] - 1]/2]]
# This is the result of the "median of medians" function.
# Its result should be the same as the above.
#
print find_i_th_smallest[ L, [len[L] - 1] / 2]
Trong chương trình này, chúng tôi đã lấy một danh sách có tên tê chứa năm số. Sau đó, chúng tôi tạo một biến khác [không] lưu trữ độ dài của tê bằng cách sử dụng len[]. Sau đó, hàm sum[] sẽ tính tổng tất cả các giá trị của danh sách được lưu trữ trong biến sum. Sau đó, để tìm giá trị trung bình, chúng tôi tính toán nó bằng cách chia tổng cho số phần tử trong danh sách. Cuối cùng, chúng tôi in giá trị trung bình
Trung bình
numb = [2, 4, 5, 8, 9]
no = len[numb]
numb.sort[]
if no % 2 == 0:
median1 = numb[no//2]
median2 = numb[no//2 - 1]
median = [median1 + median2]/2
else:
median = numb[no//2]
print["The median of the given numbers [", numb, "] is", str[median]]
đầu ra
The median of the given numbers [ [2, 4, 5, 8, 9] ] is 5
Giải trình
Trong chương trình này, chúng tôi đã lấy một danh sách có tên tê chứa năm số. Sau đó, chúng tôi tạo một biến khác [không] lưu trữ độ dài của tê bằng cách sử dụng len[]. Sau đó, sort[] sẽ sắp xếp các số của tê. Chúng ta phải kiểm tra một điều kiện xem không là chẵn hay lẻ. Nếu chẵn ta chỉ cần thực hiện phép chia sàn cho 2 trên danh sách tê và lưu vào trung vị1. Tương tự, chúng ta lại phải chia sàn cho 2 và trừ nó cho 1 và lưu trữ nó trong median2. Hai giá trị này [median1 và median2] sẽ giúp tìm số dư. Bây giờ, để tính số dư cuối cùng, hãy cộng cả trung vị 1 và trung vị 2 rồi chia tổng cho 2 [nếu độ dài của danh sách là số chẵn] hoặc ở phần khác, trung vị sẽ là số không [chia sàn 2] [nếu độ dài của danh sách . Cuối cùng, in trung bình được tính toán
Cách thức
from collections import Counter
numb = [2, 3, 4, 5, 7, 2]
no = len[numb]
val = Counter[numb]
findMode = dict[val]
mode = [i for i, v in findMode.items[] if v == max[list[val.values[]]]]
if len[mode] == no:
findMode = "The group of number do not have any mode"
else:
findMode = "The mode of a number is / are: " + ', '.join[map[str, mode]]
print[findMode]
đầu ra
The mode of a number is / are: 2
Giải trình
Đầu tiên, chúng ta sẽ nhập mô-đun bộ đếm. Trong chương trình này, chúng ta phải lấy một danh sách có tên tê chứa sáu số. Sau đó, chúng tôi tạo một biến khác [không] lưu trữ độ dài của tê bằng cách sử dụng len[]. Bộ đếm Python là một vùng chứa chứa số lượng của mọi phần tử nằm trong vùng chứa. Val sẽ giữ giá trị bộ đếm và sự tồn tại của từng phần tử. Sau đó, chúng tôi nhập giá trị của val vào từ điển bằng cách sử dụng dict[]. Sau đó, chúng tôi thực hiện thao tác hiểu danh sách bằng cách lặp lại mọi mục trong danh sách để tìm chế độ và số lượng mục được lưu trữ trong chế độ. Điều kiện if tiếp theo kiểm tra xem chế độ có độ dài bằng số hay không, nếu có, không có sự lặp lại của số trong danh sách và do đó sẽ lưu chuỗi "The group of number do not have any mode". Nếu không, nó sẽ hiển thị chế độ trong chuỗi bằng cách nối chính nó với chuỗi "Chế độ của một số là / are. "
Chương trình tìm Giá trị trung bình, Trung bình và Chế độ bằng thư viện được xác định trước
Mô-đun thống kê
Như các bạn đã biết, tính toán giá trị trung bình, phương tiện và chế độ là một số phương pháp phổ biến được thực hiện bởi các nhà phân tích dữ liệu và kỹ sư khoa học dữ liệu. Đó là lý do Python bao gồm chức năng này trong mô-đun thống kê để giúp nhiệm vụ của chúng tôi dễ dàng hơn
Mô-đun thống kê chứa các chức năng xử lý dữ liệu được xác định trước khác nhau mà bạn được hiển thị bên dưới
Để tìm giá trị trung bình, phương pháp là
import statistics
statistics.mean[[5, 3, 6, 8, 9, 12, 5]]
Để tìm giá trị trung bình, phương pháp là
import statistics
statistics.median[[5, 3, 6, 8, 9, 12, 5]]
Để tìm giá trị trung bình, phương pháp là
import statistics
statistics.mode[[5, 3, 6, 8, 9, 12, 5]]
Phần kết luận
Giá trị trung bình [hoặc trung bình], trung bình và chế độ thường là những thứ ban đầu mà các nhà phân tích dữ liệu xem xét trong bất kỳ dữ liệu mẫu nào khi cố gắng giả định độ nghiêng cần thiết của dữ liệu. Sử dụng phương pháp thủ công luôn tốt hơn, nhưng nếu mã phức tạp và chúng ta phải tìm giá trị trung bình, trung vị và chế độ trong thời gian ngắn hơn, thì sử dụng mô-đun thống kê là lựa chọn tốt nhất