样本数据混洗——用numpy简单实现

                         QQ:3020889729                                                                                 小蔡

特别声明

数据混洗的函数应该在相关一些模块中都有包含,但是有时候自己一时想不起来,不如自己用熟悉的模块来写写,补充自己的应用。(仅作学习参考)

混洗思路

采用numpy自带的random下的permutation,获取一维数据的混洗后的索引数据,然后根据混洗后索引来取原数据,即对原数据进行有对应关系的打乱。

应用

大数据应用以及人工智能学习时,对数据样本的打乱,但是不破坏数据间的相关性。

混洗代码

import numpy as np


def data_shuffle(*data, x):
    '''函数说明:

    @param: *data,需要混洗的数据——允许是多个相关的list或者narray
    @param: x,混洗的长度——即混洗的第0轴的大小对应的np.arange(len(x[axis=0]))的一维随机混洗的大小
    *data任意个~
    x可以是作为混洗的长度的int,也可以是作为混洗依据的list/narray

    主要实现思路:
        采用numyp的random下的permutation实现返回指定大小的一维随机交换——多维数组即是对第0轴的随机交换,也就是行作随机混洗顺序;
            1.随机实现行切换位置——返回混洗后的行的list[1,2,3]->list[3,1,2]
    '''
    assert len(data) > 0
    
    shuffle_data = []     # 放混洗后的数据
    permutation = np.random.permutation(x)  # 按输入指定打乱数据的第一维(即行顺序打乱,返回打乱后的行数据)
    for i in data:
        i = i[permutation]  # 以打乱的行号来索引原数据获得新数据——即混洗后的数据
        shuffle_data.append(i)   # 把每一个混洗后的数据添加到shuffle_data
    return shuffle_data

效果演示

import shuffle   # 引入我们写好的混洗.py
import numpy as np
# 注意不要轻易设定随机数种子,否则可能混洗失败

'''测试数据说明:

data1与data2为将要混洗的数据——且data1与data2一一对应
即:data1的第一行,对应data2的第一个元素——data1[0]  <-->  data2[0]
'''
data1 = np.random.randint(-10, 10, (3, 3))
data2 = np.arange(1, 4)

# print("数据混洗前:")
# print("data1: \n{0}".format(data1))   # 当前的数据内容
# print("data2: \n{0}".format(data2))

'''混洗操作说明:

1.确定同时混洗的数据——至少有一个;
2.确定混洗的长度——即第一维度的大小(选取同时混洗的相关数据的一个即可)
3.输入几个数据,对应顺序返回几个数据多个数据以list返回,可以索引
'''
data = shuffle.data_shuffle(data1, data2, x=len(data2))

print("\n\n数据混洗后:")
print("data1:\n{0}\nshuffle_data1:\n{1}".format(data1, data[0]))
print("\n\ndata2:\n{0}\nshuffle_data2:\n{1}".format(data2, data[1]))

结果展示:
在这里插入图片描述
补充:如果需要对单个一维数组进行打乱,也是一样。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章