我有两个列表。一种带有样本数据,另一种带有相应的标签。我需要从样本数据中随机选择数据,但是我也需要它们的相应标签。
这是我目前正在做的事情:
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']
最初,两个列表的长度相同,并且彼此对应。我只希望它们在对第一个数组进行随机化后保持对应状态。
答案 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))
如果您将种子设置为固定值,则生成的数字将始终按相同顺序排列。