以相同的方式在python中随机分割两个列表

时间:2018-12-06 15:59:03

标签: python numpy

我有两个列表,其中包含大小相同的numpy数组。列表list_A有1000个项目,其中每个numpy数组的大小为20x20x3,而list_B个numpy数组的大小为20x8。我想将两个列表以相同的方式随机分为100个子列表(最后,list_A的每个sub_list都包含100个numpy数组,而list_B的每个sub_list都相同)。我只针对一个列表编写了如何执行此操作的代码:

def partition (list_in, n):
    random.shuffle(list_in)
    return [list_in[i::n] for i in range(n)]

total_lists_A = partition (list_A, 10)

但是,我想以相同的方式对list_Alist_B做同样的事情,然后返回total_lists_Atotal_lists_B

2 个答案:

答案 0 :(得分:1)

我假设您正在为此进行机器学习。调查train_test_split

如果您希望从头开始执行此操作,则可以首先生成一个长度数据向量(np.arange),然后对其进行置换并将其用作索引(将置换后的索引分为序列并进行测试)设置)

答案 1 :(得分:1)

您可以在函数中包装numpy.random.seed,以使其可重现。诸如此类(根据您的方法):

# note: will not work properly if your two lists are different shapes:
def my_partition(list_in, n):
    np.random.seed(1)
    idx = np.random.shuffle(list_in)
    return [list_in[i::n] for i in range(n)]

或者(方法稍有不同,应该可以)

def my_partition(list_in, n):
    np.random.seed(1)
    idx = np.random.choice(range(len(list_in)), len(list_in))
    split = np.split(idx, n)
    return [list_in[i] for i in split]