成长记录:不知道numpy.std()时候的for循环求标准差sd的记录及numpy.std()函数的详解

成长背景:

求标准差时,当不知道有numpy.std()时,我用了for循环和append,这个方法不太好,但值得纪录!


前后对比:

import和加载数据(共用部分):

数据说明:1.txt为一个两列,4094行的数据,我要搞的是原始数据的第二列。

import numpy as np
import math
#加载原始数据
LY11_1 = np.loadtxt('data/20180824铝样51块/1_LY11/1/1.txt')
strength = LY11_1[:, 1] #取第1列,强度
print("原始数据的光谱强度为:", strength)
ave_strength = np.mean(strength)
print("原始光谱强度的均值为", ave_strength)

(1)for循环笨方法:注意思路

"""
for循环方法求sd、rsd
"""
def rsd():
    chafang = []
    for y in range(0, len(strength)):
        chafang.append((strength[y] - ave_strength) ** 2)
    sd = math.sqrt(sum(chafang) / (len(strength) - 1))
    rsd = sd / ave_strength
    print("法一求得标准偏差sd为", sd)
    print("法二求得相对标准偏差RSD为", rsd)
rsd()

(2)用上numpy.std(),瞬间简单

"""
用numpy.std()自带函数求rsd
"""
sd1 = np.std(strength, ddof=1)
rsd1 = sd1 / ave_strength
print("法二求得标准偏差sd为", sd1)
print("法二求得相对标准偏差RSD为", rsd1)

结果

 原始数据的光谱强度为: [163.76893939 154.66666667 155.33712121 ... -13.83333333  20.00757576
 -16.78787879]
原始光谱强度的均值为 859.1780996950454
法一求得标准偏差sd为 1212.8196711069093
法二求得相对标准偏差RSD为 1.411604499157258
法二求得标准偏差sd为 1212.819671106911
法二求得相对标准偏差RSD为 1.4116044991572603

Process finished with exit code 0

numpy.std()用法:

1)作用:Compute the standard deviation along the specified axis.(计算沿指定轴的标准偏差^ o ^)
2)返回值:Returns the standard deviation, a measure of the spread of a distribution, of the array elements. The standard deviation is computed for the flattened array by default, otherwise over the specified axis.(返回数组元素的标准偏差。sd默认是针对扁平数组算的,否则对象对象要不是扁平数组,就是对特定的轴算的^ o ^)
3)形式:numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=, *, where=)
4)参数意义:
—————————————————————————
a: 就是一个array,是我要计算的对象。
/array_like~Calculate the standard deviation of these values./
—————————————————————————
axis:None/int/tuple of ints.无/整数/整数元组,可选(optional)
/计算标准偏差所沿的一个或多个。默认值是计算展平数组的标准偏差。1.7.0版中的新功能。如果这是一个整数元组,则在多个轴上执行标准偏差,而不是像以前那样在单个轴或所有轴上执行标准偏差。/
—————————————————————————
dtype:用于计算标准偏差的类型。对于整数类型的数组,默认值为float64,对于浮点类型的数组,其与数组类型相同。
—————————————————————————
out:ndarray,可选。放置结果的备用输出数组。它必须具有与预期输出相同的形状,但如有必要,将强制转换(计算值的)类型。
—————————————————————————
ddof:自由度(和SD公式里的n或n-1有关)。默认情况下,ddof=0,默认是分母除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1;
》》这个很重要,我想一般我们用的分母是n-1的《《

—————————————————————————
keepdims:bool,可选。如果将其设置为True,则缩小的轴将保留为尺寸1的尺寸。使用此选项,结果将针对输入数组正确广播。
如果传递了默认值,则keepdims不会传递给的std子类的方法 ndarray,但是任何非默认值都将传递。如果子类的方法未实现keepdims,则将引发任何异常。
?这个不太懂,没遇到?
—————————————————————————
where:bool,可选。要包括在标准偏差中的元素。
—————————————————————————
!!!!!!注意!!!!!!!!
numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1;

不要囫囵吞枣,有问题及时弄清楚,由少成多


你可能感兴趣的:(numpy,数据分析,python)