如何取消随机播放数据



可能存在从函数返回的方法 shufflesklearn.utils ?我更好地解释了我的问题:我使用 shuffle 函数来随机化两个矩阵的行:

A_s, B_s = shuffle(A, B, random_state = 1)

接下来,我A_sB_s在某些操作中使用两个矩阵,并得到另一个具有相同维度的矩阵C_s:例如 C_s = f(A_s, B_s) .如何回到C的原始顺序作为AB

我正在考虑类似于sklearn.preprocessing.MinMaxScaler((0,+1))的事情,并且在我回来使用sklearn.inverse_transform().

这不一定是可能的,这取决于您选择的f。 如果f是可逆的,并且您跟踪行的随机排列方式,即使效率不高,也是可能的。 sklearn.utils shuffle 方法不会"跟踪"矩阵被洗牌的方式。 你可能想自己滚。 要生成随机洗牌,请生成 range(len(A)) 的随机排列,然后按该顺序迭代交换行。 要检索原始矩阵,您可以反转排列。 这将允许您为某些f选择恢复 C(例如基质添加)

(编辑,OP要求提供更多信息)

这对我有用,但可能有一种更有效的方法可以做到这一点:

import numpy as np
def shuffle(A,axis=0,permutation=None):
    A = np.swapaxes(A,0,axis)
    if permutation is None:
        permutation = np.random.permutation(len(A))
    temp = np.copy(A[permutation[0]])
    for i in range(len(A)-1):
        A[permutation[i]] = A[permutation[i+1]]
    A[permutation[-1]] = temp
    A = np.swapaxes(A,0,axis)
    return A, permutation
A = np.array([[1,2],[3,4],[5,6],[7,8]])
print A
B, p = shuffle(A) #NOTE: shuffle is in place, so A is the same object as B!!!!
print "shuffle A"
print B
D, _ = shuffle(B,permutation=p[::-1])
print "unshuffle B to get A"
print D
B = np.copy(B)
C = A+B
print "A+B"
print C
A_s, p = shuffle(A)
B_s, _ = shuffle(B, permutation = p)
C_s = A_s + B_s
print "shuffle A and B, then add"
print C_s
print "unshuffle that to get the original sum"
CC, _ = shuffle(C_s, permutation=p[::-1])
print CC
import numpy as np

def shuffle(x):
    x_s = x.copy()
    x_s.insert(0, x_s.pop())
    return x_s

def unshuffle(x, shuffle):
    shuffled_ind = shuffle(list(range(len(x))))
    rev_shuffled_ind = np.argsort(shuffled_ind)
    x_unshuffled = np.array(x)[rev_shuffled_ind].tolist()
    return x_unshuffled

x = [1, 2, 3, 4, 5, 6, 7]
x_s = shuffle(x)
print(x_s)
x_r = unshuffle(x_s, shuffle)
print(x_r)

这里回答得很晚。

实际上,你有自己的shuffle()函数。

这个想法是使序列洗牌,并使用 np.argsoft() 获取用于解洗的索引。

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新