有效值计算czy

import numpy as np


def cal_d(all_jj):
    print("所有报价:{0}".format(all_jj))
    all_jj.sort(reverse=True);
    print("所有报价,由高到低排序后:{0}".format(all_jj))
    arr_length = len((all_jj))
    a = [i for i in range(arr_length)][:arr_length - 1]
    cz_1 = [(all_jj[i] - all_jj[i + 1]) for i in a]
    print("报价差值:{0}".format(cz_1))
    cz_1.sort(reverse=True);
    print("报价差值由高到低排序:{0}".format(cz_1))
    print("所有差值数量:{0}".format(len(cz_1)))
    czsl_30 = len(cz_1) * 0.3
    print("小数点后第一位四舍五入后取整,取整前:{0}".format(czsl_30))
    czsl_30 = round(czsl_30)
    print("小数点后第一位四舍五入后取整,取整后:{0}".format(czsl_30))
    cz_1 = cz_1[:czsl_30]
    print("前30%的差值:{0}".format(cz_1))
    sspjz = np.mean(cz_1)
    print("算术平均值,即组距D值:{0}".format(sspjz))
    return sspjz


def do_group(all_jj, zj_d):
    target_arr = []
    all_jj.sort(reverse=True);
    while len(all_jj) > 0:
        arr = [x for x in all_jj if x > all_jj[0] - zj_d]
        target_arr.append(arr)
        for i in arr:
            all_jj.remove(i)
    print("分组结果:{}".format(target_arr))
    return target_arr


if __name__ == '__main__':
    # 模拟报价
    all_jj = [36000, 43523, 32432, 45433, 40000, 34000, 35435, 36000, 35754, 35426, 36784, 39863, 42352, 36000, 35754,
              35426, 36784, 39863, 42352]
    zj_d = cal_d(all_jj)
    # 确定有效值
    group_result = do_group(all_jj, zj_d)
    mean_arr = []
    for i in group_result:
        if len(i) > 0:
            mean_value = np.mean(i)
            print("分组{0}的均值:{1}".format(i, mean_value))
            mean_arr.append(mean_value)
    print("分组均值:{}".format(mean_arr))
    mean_arr.sort(reverse=True);
    print("分组均值--排序后:{}".format(mean_arr))
    s = int(len(mean_arr) / 5) - 1
    print("{0} < 分组数 <= {1}".format(5 * s, 5 * (s + 1)))
    k = 2 + s
    print("K = {}".format(k))
    print("====== 有效值 = {}".format(mean_arr[-k]))

  https://www.w3cschool.cn/tryrun/runcode?lang=python3

posted @ 2022-09-19 15:17  影卓后台开发人员  阅读(33)  评论(0编辑  收藏  举报