সংখ্যার তালিকার পাটিগণিত গড় (গড় এক ধরণের) গণনা করার জন্য পাইথনে অন্তর্নির্মিত বা মানক গ্রন্থাগার পদ্ধতি আছে কি?
সংখ্যার তালিকার পাটিগণিত গড় (গড় এক ধরণের) গণনা করার জন্য পাইথনে অন্তর্নির্মিত বা মানক গ্রন্থাগার পদ্ধতি আছে কি?
উত্তর:
আমি স্ট্যান্ডার্ড লাইব্রেরিতে কিছুই জানিনা। তবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
নোংরা মধ্যে, আছে numpy.mean()
।
[]
হল 0
, যা দ্বারা করা যায় float(sum(l))/max(len(l),1)
।
max
?
NumPy এর একটি numpy.mean
গাণিতিক গড়। ব্যবহার এটির মতো সহজ:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
ব্যবহার statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
পাইথন ৩.৪ থেকে এটি উপলব্ধ। ৩.১-৩.৩ ব্যবহারকারীদের জন্য পিপিআইতে নাম অনুসারে মডিউলটির একটি পুরানো সংস্করণ উপলব্ধ stats
। শুধু পরিবর্তন statistics
করতে stats
।
timeit("numpy.mean(vec))
, timeit("sum(vec)/len(vec)")
এবং timeit("statistics.mean(vec)")
- পরেরটির একটি বিশাল ফ্যাক্টর (> আমার পিসিতে কিছু ক্ষেত্রে 100) করে অন্যদের তুলনায় ধীর হয়। এটি sum
অপারেটরের বিশেষত নির্ভুল প্রয়োগের কারণে বলে মনে হচ্ছে statistics
, পিইপি এবং কোড দেখুন । যদিও statistics._sum
এবং এর মধ্যে বৃহত পারফরম্যান্স পার্থক্যের কারণ সম্পর্কে নিশ্চিত নয় numpy.sum
।
statistics.mean
চেষ্টা করে । এটি সঠিকভাবে গড় গণনা করে । [1e50, 1, -1e50] * 1000
statistics.mean
মানগুলির একটি জেনারেটর এক্সপ্রেশনও গ্রহণ করবে, যা len()
বিভাজকের জন্য ব্যবহার করা সমস্ত সমাধান বন্ধ হয়ে যাবে।
এমনকি আপনার অদ্ভুত বা ছদ্মবেশের প্রয়োজন নেই ...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import division
এ আপনি যদি আপনার প্রোগ্রামের শীর্ষে থাকেন
a = list()
? প্রস্তাবিত কোড ফলাফল ZeroDivisionError
।
স্কিপি ব্যবহার করুন:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
ভাসতে কাস্টিংয়ের পরিবর্তে আপনি নিম্নলিখিতটি করতে পারেন
def mean(nums):
return sum(nums, 0.0) / len(nums)
বা ল্যাম্বদা ব্যবহার করে
mean = lambda nums: sum(nums, 0.0) / len(nums)
আপডেটগুলি: 2019-12-15
পাইথন 3.8 ফাংশন যোগ fmean করতে পরিসংখ্যান মডিউল। যা দ্রুত এবং সর্বদা ভাসা ফেরত দেয়।
ডেটাগুলিকে ফ্লোটে রূপান্তর করুন এবং গণিতের গড় গণনা করুন।
এটি গড় () ফাংশনটির চেয়ে দ্রুত গতিতে চলে এবং এটি সর্বদা একটি ভাসা ফেরত দেয়। ডেটা একটি ক্রম বা পুনরাবৃত্ত হতে পারে। যদি ইনপুট ডেটাসেট খালি থাকে তবে একটি স্ট্যাটিস্টিক্সরর উত্থাপন করে।
Fmean ([3.5, 4.0, 5.25])
4.25
সংস্করণে নতুন 3.8।
from statistics import mean
avarage=mean(your_list)
উদাহরণ স্বরূপ
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
এবং ফলাফল হয়
3.0
def avg(l):
"""uses floating-point division."""
return sum(l) / float(len(l))
l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]
print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
def list_mean(nums):
sumof = 0
num_of = len(nums)
mean = 0
for i in nums:
sumof += i
mean = sumof / num_of
return float(mean)
আমার মনে avg
হয় বিল্টিনস / স্টিডলিব থেকে সর্বদা বাদ দেওয়া হয় কারণ এটি যতটা সহজ
sum(L)/len(L) # L is some list
এবং কোনও সতর্কতা ইতিমধ্যে স্থানীয় ব্যবহারের জন্য কলার কোডে সম্বোধন করা হবে ।
উল্লেখযোগ্য সতর্কতা:
অ-ভাসমান ফলাফল: পাইথন 2 এ, 9/4 2 সমাধান, ব্যবহার float(sum(L))/len(L)
বাfrom __future__ import division
শূন্য দ্বারা বিভাগ: তালিকা খালি হতে পারে। ঠিক করতে:
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)
আপনার প্রশ্নের সঠিক উত্তরটি ব্যবহার করা statistics.mean
। তবে মজা করার জন্য, এখানে গড়টির এমন একটি সংস্করণ রয়েছে যা len()
ফাংশনটি ব্যবহার করে না , সুতরাং এটি (যেমন statistics.mean
) জেনারেটরে ব্যবহার করা যেতে পারে, যা সমর্থন করে না len()
:
from functools import reduce
from operator import truediv
def ave(seq):
return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]),
enumerate(seq, start=1),
(0, 0)))
অন্যরা ইতিমধ্যে খুব ভাল উত্তর পোস্ট করেছে, তবে কিছু লোক এখনও গড় (গড়) সন্ধানের জন্য একটি সর্বোত্তম উপায় খুঁজছেন, সুতরাং এখানে আমি এটি পোস্ট করছি (পাইথন ৩.6-তে পরীক্ষিত কোড):
def meanmanual(listt):
mean = 0
lsum = 0
lenoflist = len(listt)
for i in listt:
lsum += i
mean = lsum / lenoflist
return float(mean)
a = [1, 2, 3, 4, 5, 6]
meanmanual(a)
Answer: 3.5