Skip to main content
 首页 » 编程设计

python之将数据集拆分为两个非冗余的 numpy 数组

2024年11月24日3cloudgamer

我有一个 numpy 数组“my_data”。我正在尝试随机拆分此数据集。但是,当我使用以下代码执行此操作时,我得到一个“train”数组和一个“test”数组。训练数组和测试数组在列中有一些行。

training_idx = np.random.randint(my_data.shape[0], size=split_size) 
test_idx = np.random.randint(my_data.shape[0], size=len(my_data)-split_size) 
train, test = my_data[training_idx,:], my_data[test_idx,:] 

我的目的是首先随机找到训练数组,然后将 my_data 中不在训练数组中的任何行作为测试数组的一部分。

在 numpy 中有没有办法做到这一点? (我避免使用 sklearn 来拆分我的数据)

我在此处引用这篇文章以获取我的数据集。 How to split/partition a dataset into training and test datasets for, e.g., cross validation?

如果我按照这篇文章的逻辑进行编码,我最终会得到训练和测试数据集,其中训练和测试中有一些冗余行。我打算制作不常见行的训练和测试数据集。

请您参考如下方法:

正在关注 this answer你可以这样做:

train_idx = np.random.randint(my_data.shape[0], size=split_size)     
mask = np.ones_like(my_data, dtype=bool) 
mask[train_idx] = False 
train, test = my_data[~mask], my_data[mask] 

不过,正如 Poojan 所建议的,更自然的方法是对数据进行切片排列。

permuted = np.random.permutation(my_data) 
train, test = permuted[:split_size], permuted[split_size:]