Python 火车考试把一系列句子分开

Python 火车考试把一系列句子分开,python,Python,我有一个句子列表。我想随机分为80%和20%,如下所示: ['Hi.', 'Hi.', 'Run!', 'Wow!', 'Wow!', 'Fire!', 'Help!', 'Help!', 'Stop!', 'Wait!', 'Go on.', 'Hello!', 'I ran.', 'I see.', 'I see.', 'I try.', 'I won!',...] 我在想用面具 import random mask = [0] * 4000 + [1] *

我有一个句子列表。我想随机分为80%和20%,如下所示:

['Hi.',
 'Hi.',
 'Run!',
 'Wow!',
 'Wow!',
 'Fire!',
 'Help!',
 'Help!',
 'Stop!',
 'Wait!',
 'Go on.',
 'Hello!',
 'I ran.',
 'I see.',
 'I see.',
 'I try.',
 'I won!',...]
我在想用面具

import random
mask = [0] * 4000 + [1] * 16000
random.shuffle(mask)
但它不像一个数据帧。 我试过了

percent=80
bol_mask =[random.randrange(100) < percent for i in range(100)]

我的问题是如何将掩码应用于一系列句子?并保持相同的拆分并应用于相应的ndarray?

如果使用
scikit学习
是一个选项,您可以使用以下方法:

>>> from sklearn.model_selection import train_test_split
>>> print(x)
>>> x
['Hi.', 'Hi.', 'Run!', 'Wow!', 'Wow!', 'Fire!', 'Help!', 'Help!', 'Stop!', 'Wait!']

>>> len(x)
10
>>>  x1
array([[ 553,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [3430, 1114,    6,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [1115,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [3431,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [3432,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [2459,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [3433,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [1533, 3434,    6,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [2460,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0],
       [ 394,    6,    0,    0,    0,    0,    0,    0,    0,    0,    0,
           0,    0,    0,    0,    0,    0,    0,    0,    0]])
>>> x1.shape
(10, 20)

#assuming x, x1 have same length train test split should work fine.
>>> train, test, train_german, test_german = train_test_split(x,x1, test_size=0.2, shuffle=True)
>>> len(train)
8
>>> len(test)
2
>>> len(train_german)
8
>>> len(test)
2

事实上我已经自己解决了

bol_mask =[random.randrange(100) < 80 for i in range(20000)]
inv_mask = np.invert(bol_mask)

Eng_train =np.array(Eng)[bol_mask]
Eng_test =np.array(Eng)[inv_mask]
German_train = padded[bol_mask]
German_test = padded[inv_mask]
bol_mask=[random.randrange(100)<80表示范围内的i(20000)]
反向屏蔽=反向屏蔽(bol屏蔽)
Eng_序列=np.阵列(Eng)[bol_掩码]
Eng_测试=np.数组(Eng)[inv_掩码]
德文列车=软垫[波卢面罩]
德语测试=加垫[inv_面罩]

感谢Grayrigel,接受您的帮助

添加了答案。让我知道它是否适合你。如果确实如此,请考虑接受/检查答案。但是如何保持其他列表的相同分割?我有相应的德语翻译。它是一个填充的nd数组,看起来像这样的数组([[553,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dtype=int32)它将需要一个相应的拆分实际上不是真的,它在1中从sklearn.model\u selection导入train\u test\u split-->2 train,test=train\u test\u split(Eng,padded,test\u size=0.2,shuffle=True)返回ErrorValueError:值太多,无法解包我已经更新了答案。我很想知道它是否适合你。
bol_mask =[random.randrange(100) < 80 for i in range(20000)]
inv_mask = np.invert(bol_mask)

Eng_train =np.array(Eng)[bol_mask]
Eng_test =np.array(Eng)[inv_mask]
German_train = padded[bol_mask]
German_test = padded[inv_mask]