कैसे मैं मानक विचलन की गणना में अजगर का उपयोग कर के बिना numpy?

0

सवाल

मैं कोशिश कर रहा हूँ की गणना करने के लिए मानक विचलन में अजगर के उपयोग के बिना numpy या किसी भी बाहरी पुस्तकालय के लिए छोड़कर math. मैं प्राप्त करना चाहते हैं पर बेहतर लेखन एल्गोरिदम और कर रहा हूँ सिर्फ यह कर के रूप में एक बिट के 'होमवर्क' मैं सुधार के रूप में अपने अजगर कौशल. मेरा लक्ष्य है अनुवाद करने के लिए इस सूत्र में अजगर लेकिन हूँ नहीं मिल रहा है सही परिणाम.

मैं कर रहा हूँ की एक सरणी का उपयोग गति, जहां speeds = [86,87,88,86,87,85,86]

जब मैं चलाने के लिए:

std_dev = numpy.std(speeds)
print(std_dev)

मैं: 0.903507902905. लेकिन मैं नहीं करना चाहते हैं पर भरोसा करने के लिए numpy. तो...

मेरे कार्यान्वयन के रूप में निम्नानुसार है:

import math

speeds = [86,87,88,86,87,85,86]

def get_mean(array):
    sum = 0
    for i in array:
        sum = sum + i
    mean = sum/len(array)
    return mean

def get_std_dev(array):
    # get mu
    mean = get_mean(array)
    # (x[i] - mu)**2
    for i in array:
        array = (i - mean) ** 2
        return array
    sum_sqr_diff = 0
    # get sigma
    for i in array:
        sum_sqr_diff = sum_sqr_diff + i
        return sum_sqr_diff
    # get mean of squared differences
    variance = 1/len(array)
    mean_sqr_diff = (variance * sum_sqr_diff)
    
    std_dev = math.sqrt(mean_sqr_diff)
    return std_dev

std_dev = get_std_dev(speeds)
print(std_dev)

अब जब मैं चलाने के लिए:

std_dev = get_std_dev(speeds)
print(std_dev)

मैं: [0] लेकिन मैं उम्मीद कर रहा हूँ 0.903507902905

क्या हूँ मैं यहाँ याद आ रही?

algorithm mean python standard-deviation
2021-11-23 20:46:59
5

सबसे अच्छा जवाब

1
speeds = [86,87,88,86,87,85,86]

# Calculate the mean of the values in your list
mean_speeds = sum(speeds) / len(speeds)

# Calculate the variance of the values in your list
# This is 1/N * sum((x - mean(X))^2)
var_speeds = sum((x - mean_speeds) ** 2 for x in speeds) / len(speeds)

# Take the square root of variance to get standard deviation
sd_speeds = var_speeds ** 0.5

>>> sd_speeds
0.9035079029052513
2021-11-23 21:10:27

जब मैं चलाने के लिए है कि मैं 1.0.
bkleeman

पुनः आरंभ अपने अजगर गिरी । आप किया है कुछ है, के साथ एक निर्मित में कार्य करता है ।
CJR

ओह, कोई बात नहीं, आप का उपयोग कर रहे हैं python2.7, arent आप. जोड़ें from __future__ import division - मानक विभाजन / सच नहीं है विभाजन जब तक अजगर 3.0 जब तक कि आप आयात से भविष्य.
CJR

हाँ, मैं का उपयोग कर रहा हूँ 2.7. अपने समाधान प्लस भविष्य के विभाजन आयात लिए काम कर रहा है मुझे अब. बहुत बहुत धन्यवाद मदद के लिए!
bkleeman

यह समय है करने के लिए स्थानांतरित करने के लिए py3, दोस्त.
CJR

मैं बहुत नया करने के लिए अजगर और मैं अभी तक नहीं सुलझा कविता या कारण के रूप में करने के लिए जब मेरे मशीन चलाता है py2 बनाम py3 ईमानदार होना करने के लिए. मैं पाने के लिए होगा कि बाहर हल.
bkleeman

का एक बहुत कुछ लिनक्स distros के साथ जहाज py2.7 और py3 - आप शायद python3 (लेकिन बाइनरी है python3 के बजाय सिर्फ python). आप भी विचार कर सकते हैं का उपयोग कर की तरह कुछ एनाकोंडा स्थापित करने के लिए वातावरण. py2.7 अच्छी तरह से अतीत है अंत-के-जीवन.
CJR
1

समस्या में अपने कोड का पुन: उपयोग की सरणी और वापसी के बीच में पाश

def get_std_dev(array):
    # get mu
    mean = get_mean(array)       <-- this is 86.4
    # (x[i] - mu)**2
    for i in array:
        array = (i - mean) ** 2  <-- this is almost 0
        return array             <-- this is the value returned

अब हमें देखो एल्गोरिथ्म के साथ आप का उपयोग कर रहे हैं. ध्यान दें कि वहाँ रहे हैं दो एसटीडी विचलन कर रहे हैं कि फार्मूले आमतौर पर इस्तेमाल किया जाता है । वहाँ विभिन्न तर्कों के रूप में, जो करने के लिए एक सही है.

sqrt(sum((x - mean)^2) / n)

या

sqrt(sum((x - mean)^2) / (n -1))

के लिए बड़े मूल्यों के n, पहला सूत्र प्रयोग किया जाता है के बाद से, -1 नगण्य है. पहला सूत्र को कम किया जा सकता

sqrt(sum(x^2) /n - mean^2)

तो आप कैसे करना होगा, इस अजगर में?

def std_dev1(array):
   n = len(array)
   mean = sum(array) / n
   sumsq = sum(v * v for v in array)
   return (sumsq / n - mean * mean) ** 0.5
2021-11-24 06:21:59
-1

कुछ कोड में समस्याओं, उनमें से एक है, वापसी मान के अंदर के लिए बयान. आप यह कोशिश कर सकते हैं

def get_mean(array):
    return sum(array) / len(array)


def get_std_dev(array):
    n = len(array)
    mean = get_mean(array)
    squares_arr = []
    for item in array:
        squares_arr.append((item - mean) ** 2)
    return math.sqrt(sum(squares_arr) / n)
2021-11-23 22:06:23
-2

इस. आप की जरूरत है से छुटकारा पाने के लिए return अंदर के लिए छोरों ।

def get_std_dev(array):
    # get mu
    mean = get_mean(array)
    sum_sqr_diff = 0
    # get sigma
    for i in array:
        sum_sqr_diff = sum_sqr_diff + (i - mean)**2
    # get mean of squared differences
    variance = 1/len(array)
    mean_sqr_diff = (variance * sum_sqr_diff)
    
    std_dev = math.sqrt(mean_sqr_diff)
    return std_dev
2021-11-23 20:59:12
-2

यदि आप नहीं चाहते हैं का उपयोग करने के लिए numpy इसके ठीक एक कोशिश देने के लिए statistics पैकेज में अजगर

import statistics

st_dev = statistics.pstdev(speeds)
print(st_dev)

या यदि आप कर रहे हैं अभी भी उपयोग करने के लिए तैयार एक कस्टम समाधान तो मैं आप की सिफारिश करने के लिए निम्नलिखित तरीके से उपयोग का उपयोग कर सूची समझ के बजाय अपने जटिल दृष्टिकोण छोटी गाड़ी

import math

mean = sum(speeds) / len(speeds)
var = sum((l-mean)**2 for l in speeds) / len(speeds)
st_dev = math.sqrt(var)
print(st_dev)
2021-11-23 20:58:42

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में