পাইথনে পাটিগণিত গড় (এক ধরণের গড়) গণনা করা হচ্ছে


267

সংখ্যার তালিকার পাটিগণিত গড় (গড় এক ধরণের) গণনা করার জন্য পাইথনে অন্তর্নির্মিত বা মানক গ্রন্থাগার পদ্ধতি আছে কি?


গড় অস্পষ্ট - মোড এবং মিডিয়ান সাধারণভাবে ব্যবহৃত গড়
jtlz2

মোড এবং মিডিয়ান হ'ল কেন্দ্রীয় প্রবণতার অন্যান্য ব্যবস্থা। তারা গড় হয় না। মোডটি একটি ডেটা সেটে দেখা সবচেয়ে সাধারণ মান এবং এটি অনন্যরূপে হয় না। মিডিয়ান হ'ল মান যা ডেটা পয়েন্টগুলির কেন্দ্রকে উপস্থাপন করে। প্রশ্নটি থেকেই বোঝা যাচ্ছে, গড়ে কয়েক ধরণের গড় রয়েছে তবে সবগুলি মাঝারি এবং মোডের গণনা থেকে আলাদা। বেগুনিমাথ.com
ম্যানমোড

@ জারোম সেই লিঙ্কটি আপনার সাথে একমত নয়: 'গড়, মাঝারি এবং মোড তিন ধরণের "গড়" "
মার্সেলো ক্যান্টোস

উত্তর:


284

আমি স্ট্যান্ডার্ড লাইব্রেরিতে কিছুই জানিনা। তবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

def mean(numbers):
    return float(sum(numbers)) / max(len(numbers), 1)

>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0

নোংরা মধ্যে, আছে numpy.mean()


20
একটি সাধারণ বিষয় বিবেচনা করা হয় যে গড়টি []হল 0, যা দ্বারা করা যায় float(sum(l))/max(len(l),1)
yo

8
পিইপি 8 বলে যে lএটি একটি খারাপ পরিবর্তনশীল নাম কারণ এটি দেখতে অনেকটা পছন্দ করে 1। এছাড়াও, আমি if lবরং ব্যবহার করব if len(l) > 0এখানে
জুন

1
কেন ফোন করেছেন max?
1 -_-

3
উপরের প্রশ্নটি দেখুন: শূন্য দ্বারা বিভাগ এড়ানোর জন্য ([]]
সাইমন ফকির

5
খালি তালিকার কোনও অর্থ নেই। দয়া করে তারা ভান করবেন না।
মার্সেলো ক্যান্টোস

193

NumPy এর একটি numpy.meanগাণিতিক গড়। ব্যবহার এটির মতো সহজ:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335

6
নম্পি একটি ভার্চুয়ালেনভে ইনস্টল করার জন্য দুঃস্বপ্ন। আপনার এই
লিবিবটি

46
@vcarel: "নিম্পি একটি ভার্চুয়ালেনভে ইনস্টল করার জন্য একটি দুঃস্বপ্ন"। আপনি কেন এ কথাটি বলছেন তা আমি নিশ্চিত নই। এটি ক্ষেত্রে ব্যবহৃত হত তবে গত বছর বা তারও বেশি সময় এটি খুব সহজ ছিল been

6
আমি অবশ্যই এই মন্তব্য দ্বিতীয়। আমি বর্তমানে ওএসএক্সের একটি ভার্চুয়ালেনভে নিম্পী ব্যবহার করছি এবং একেবারেই কোনও সমস্যা নেই (বর্তমানে সিপিথন ৩.৫ ব্যবহার করছে)।
হুয়ান কার্লোস কটো

4
ট্র্যাভিস সিআই এর মতো ক্রমাগত একীকরণ সিস্টেমের সাথে, নিম্পি ইনস্টল করতে বেশ কয়েকটি অতিরিক্ত সময় লাগে takes দ্রুত এবং হালকা বিল্ড যদি আপনার পক্ষে মূল্যবান হয় এবং আপনার কেবলমাত্র গড় প্রয়োজন, বিবেচনা করুন।
আকসেলি পালান

2
ট্র্যাভিস সিআই-তে @ আকসেলিপালান ভার্চুয়াল পরিবেশগুলি সিস্টেম সাইট প্যাকেজগুলি ব্যবহার করে অ্যাপটি-গেটের মাধ্যমে ইনস্টল করা একটি নিমপি ব্যবহার করতে পারে । এটির জন্য কেবলমাত্র কোনও গড়ের প্রয়োজন হলেও এটি ব্যবহার করার জন্য যথেষ্ট দ্রুত হতে পারে।
বেনগেট

184

ব্যবহার statistics.mean:

import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335

পাইথন ৩.৪ থেকে এটি উপলব্ধ। ৩.১-৩.৩ ব্যবহারকারীদের জন্য পিপিআইতে নাম অনুসারে মডিউলটির একটি পুরানো সংস্করণ উপলব্ধ stats। শুধু পরিবর্তন statisticsকরতে stats


2
নোট করুন যে অন্যান্য সমাধানগুলির সাথে তুলনা করার সময় এটি অত্যন্ত ধীর। তুলনা করুন timeit("numpy.mean(vec)), timeit("sum(vec)/len(vec)")এবং timeit("statistics.mean(vec)")- পরেরটির একটি বিশাল ফ্যাক্টর (> আমার পিসিতে কিছু ক্ষেত্রে 100) করে অন্যদের তুলনায় ধীর হয়। এটি sumঅপারেটরের বিশেষত নির্ভুল প্রয়োগের কারণে বলে মনে হচ্ছে statistics, পিইপি এবং কোড দেখুন । যদিও statistics._sumএবং এর মধ্যে বৃহত পারফরম্যান্স পার্থক্যের কারণ সম্পর্কে নিশ্চিত নয় numpy.sum
ঝিন

10
@ জিন এটি কারণ সঠিক হওয়ার statistics.meanচেষ্টা করে । এটি সঠিকভাবে গড় গণনা করে । [1e50, 1, -1e50] * 1000
অ্যান্টি হাপাল

1
statistics.meanমানগুলির একটি জেনারেটর এক্সপ্রেশনও গ্রহণ করবে, যা len()বিভাজকের জন্য ব্যবহার করা সমস্ত সমাধান বন্ধ হয়ে যাবে।
পলমিসিজি

54

এমনকি আপনার অদ্ভুত বা ছদ্মবেশের প্রয়োজন নেই ...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3

24
তারপরের অর্থ ([2,3]) 2 দিবে flo আরও ভাল ব্যবহার ভাসা (যোগফল (l)) / লেন (l)। আরও ভাল, তালিকাটি খালি আছে কিনা তা পরীক্ষা করতে সাবধান হন।
jesusiniesta

14
@ জেসুসিনিয়েস্তা অজগর 3 ব্যতীত, যেখানে বিভাগ যা করার
তাগিদ করে

11
এবং পাইথন ২.২+ from __future__ import divisionএ আপনি যদি আপনার প্রোগ্রামের শীর্ষে থাকেন
spiffytech

বড় সংখ্যা এবং ওভারফ্লো সম্পর্কে কি?
ওবায়হান

কি হবে a = list()? প্রস্তাবিত কোড ফলাফল ZeroDivisionError
ইওনিস ফিলিপিসিস


7

ভাসতে কাস্টিংয়ের পরিবর্তে আপনি নিম্নলিখিতটি করতে পারেন

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।


2
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

1
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


0

আমার মনে avgহয় বিল্টিনস / স্টিডলিব থেকে সর্বদা বাদ দেওয়া হয় কারণ এটি যতটা সহজ

sum(L)/len(L) # L is some list

এবং কোনও সতর্কতা ইতিমধ্যে স্থানীয় ব্যবহারের জন্য কলার কোডে সম্বোধন করা হবে ।

উল্লেখযোগ্য সতর্কতা:

  1. অ-ভাসমান ফলাফল: পাইথন 2 এ, 9/4 2 সমাধান, ব্যবহার float(sum(L))/len(L)বাfrom __future__ import division

  2. শূন্য দ্বারা বিভাগ: তালিকা খালি হতে পারে। ঠিক করতে:

    if not L:
        raise WhateverYouWantError("foo")
    avg = float(sum(L))/len(L)

0

আপনার প্রশ্নের সঠিক উত্তরটি ব্যবহার করা 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)))

-2

অন্যরা ইতিমধ্যে খুব ভাল উত্তর পোস্ট করেছে, তবে কিছু লোক এখনও গড় (গড়) সন্ধানের জন্য একটি সর্বোত্তম উপায় খুঁজছেন, সুতরাং এখানে আমি এটি পোস্ট করছি (পাইথন ৩.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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.