我有两个列表,我需要从一个列表中选择一个随机样本,然后从第二个列表中选择相应的索引

时间:2019-05-05 20:15:53

标签: python random

我有两个列表。一种带有样本数据,另一种带有相应的标签。我需要从样本数据中随机选择数据,但是我也需要它们的相应标签。

这是我目前正在做的事情:

amount = int(5000 * percent)
rawTrainingData = random.sample(rawTrainingData, amount)

原始训练数据是我的第一份清单。我的第二个列表是trainingLabels,但我希望它与第一个列表相对应。

例如,如果您有这样的列表:

['A','B','C','D']
['1','2','3','4']

我想从第一个列表中选择两个随机元素,并从第二个列表中选择它们对应的索引。

示例:

['C','A']
['3','1']

['B','D']
['2','4']

最初,两个列表的长度相同,并且彼此对应。我只希望它们在对第一个数组进行随机化后保持对应状态。

6 个答案:

答案 0 :(得分:2)

将两个列表都压缩在一起,从压缩列表中选择一个项目:

import random

a = ['A','B','C','D']
b = ['1','2','3','4']

c = list(zip(a,b))

print(random.choice(c))

可以输出:

('A', '1')
('D', '4')

“解压缩”(如果需要)。并使用sample避免重复:

list1=[]
list2=[]
for a,b in random.sample(c,2):
    list1.append(a)
    list2.append(b)

可以输出:

>>> list1
['B', 'A']
>>> list2
['2', '1']
>>> 

答案 1 :(得分:0)

代码:

def foo(original, sample):
    return [str(original.index(i) + 1) for i in sample]

foo(['A', 'B', 'C', 'D'], ['A', 'C'])

它将返回:

['1', '3']

答案 2 :(得分:0)

我认为评论者的建议是

j = list(zip(rawTrainingData, trainingLabels)
selected = random.sample(j, amount)
selected_training_data = [td for (td, l) in selected]
selected_labels = [l for (td, l in selected]

当然还有其他方法,但这似乎是一个好方法。

答案 3 :(得分:0)

如果要从两个不同的列表中获取两个列表,例如a,b

import random

a = ['A','B','C','D']
b = ['1','2','3','4']

c,d = zip(*random.sample(list(zip(a,b)),2))
print(c,d)

它将返回

('C', 'A') ('3', '1')

答案 4 :(得分:0)

import random
import numpy as np

def _random_sample(X, y, sample_size):
  data =[(i,j) for i,j in zip(X, y)]
  data_2= random.sample(data, sample_size)
  del data
  
  X1 = []
  y1 = []
  for t in data_2:
   X1.append(t[0])
   y1.append(t[1])
  
  del data_2
  X1 = np.array(X1)
  y1 = np.array(y1)
  return X1, y1


X_train=[ [1,1,1], [2,2,2],  [3,3,3], [4,4,4] ]
y_train =['a', 'b', 'c', 'd']

X1, y1 = _random_sample(X_train, y_train, 3)

答案 5 :(得分:0)

import random       

a = [i for i in range(1,10)]        
b = [i*10 for i in range(1,10)]        

random.seed(110)        
print(random.sample(a,4)    

random.seed(110)        
print(random.sample(b,4))       

如果您将种子设置为固定值,则生成的数字将始终按相同顺序排列。