【问题标题】:Reverse shuffled data [duplicate]反向洗牌数据[重复]
【发布时间】:2020-10-10 13:16:06
【问题描述】:

我正在使用sklearnshuffle() 方法来打乱m x n x o 矩阵的行并打乱m x 1 向量:

from sklearn.utils import shuffle
import numpy as np
X = np.random.rand(10,4,3)
y = np.random.rand(10)
X, y = shuffle(X, y, random_state=1)

有没有办法对数据进行非洗牌,即反转洗牌?因为X 非常大(在上面的示例中它很小),所以我无法同时存储打乱和未打乱的数据。

【问题讨论】:

    标签: python scikit-learn shuffle


    【解决方案1】:

    这是一种你可以洗牌然后取消洗牌的方法:

    import random
    
    
    def getperm(l):
        seed = sum(sum(a) for a in l)
        random.seed(seed)
        perm = list(range(len(l)))
        random.shuffle(perm)
        random.seed()  # optional, in order to not impact other code based on random
        return perm
    
    
    def shuffle(l):
        perm = getperm(l)
        l[:] = [l[j] for j in perm]
    
    
    def unshuffle(l):
        perm = getperm(l)
        res = [None] * len(l)
        for i, j in enumerate(perm):
            res[j] = l[i]
        l[:] = res
    

    函数调用示例:

    l=[(1,2),(3,4),(5,6),(7,8),(9,10)]
    print(l)
    shuffle(l)
    print(l)  # shuffled
    unshuffle(l)
    print(l)  # the original
    

    输出:

    [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
    
    [(5, 6), (7, 8), (9, 10), (3, 4), (1, 2)]
    
    [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
    

    【讨论】:

    猜你喜欢
    • 2019-05-25
    • 2021-04-23
    • 2017-01-26
    • 2013-02-24
    • 2017-06-24
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多