python之数据长度归一化

        在处理数据的时候,需要把不同长度的数据变成相同长度,百度了半天没有找到相关的,于是自己用python写了一个数据长度归一化。

        原理:如果数据长度与要归一化的长度相同,直接返回;如果数据长度大于要归一化的长度,按照超长的间隔舍弃;如果数据长度小于要归一化的长度,按照缺少的间隔增加与之相邻的数据,在此我是直接复制的上一个数据,如果需要可以根据需求按照相应方式添加。舍弃或者增加的间隔除出来肯定不是整数,在此通过一个小的for循环处理掉除出来是整数的部分,然后没遍历依次将余数相加,如果余数和1相减小于1,则进行依次数据舍弃或者数据增加。经过这样处理后最后的数据长度与需要的真实长度之间有时会存在1的误差,故再通过在末尾添加0或者舍弃一位实现。

        程序源码如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# author:SingWeek

def samelen(data,length=300):
    """
    数据长度归一化
    :param data:以数组形式输入需要归一化的数据
    :param length:归一化后的长度
    :return:result:归一化后的数据返回值
    """
    result=[]
    truelen=len(data)
    if truelen==length:
        return data
    elif truelen>length:
        integer=int(truelen/length)
        decimal=truelen-length*integer
        mid=decimal/truelen
        tmp=0
        for i in range(0,truelen,integer):
            tmp+=mid
            if tmp-1>=0:
                tmp-=1
            else:
                result.append(data[i])
        resulttmp=len(result)
        if resulttmp==length:
            return result
        elif resulttmp<length:
            for i in range(length-resulttmp):
                result.append(0.0)
            return result
        else:
            return result[:length]
    else:
        integer=int(length/truelen)
        decimal=length-truelen*integer
        mid=decimal/truelen
        tmp=0
        for i in range(truelen):
            for j in range(integer):
                result.append(data[i])
            tmp+=mid
            if tmp-1>=0:
                result.append(data[i])
                tmp-=1
        resulttmp=len(result)
        if resulttmp==length:
            return result
        elif resulttmp<length:
            for i in range(length-resulttmp):
                result.append(0.0)
            return result
        else:
            return result[:length]

        其他样本数据的归一化已经有了,在此不做过多阐述,可以参考博文:

        https://blog.csdn.net/u011650143/article/details/71515927

        https://blog.csdn.net/pipisorry/article/details/52247379

                                             

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值