在我的数据集中,我已接近200行但是为了最小化工作,例如,让我们假设以下数组:
arr = np.array([[1,2,3,4], [5,6,7,8],
[9,10,11,12], [13,14,15,16],
[17,18,19,20], [21,22,23,24]])
我可以对3行进行随机抽样,如下所示:
indexes = np.random.choice(np.arange(arr.shape[0]), int(arr.shape[0]/2), replace=False)
使用这些索引,我可以按如下方式选择我的测试用例:
testing = arr[indexes]
我想删除这些索引处的行,我可以将剩余的元素用于我的训练集。
从帖子here开始,training = np.delete(arr, indexes)
似乎应该这样做。但我得到了1d阵列。
我还尝试使用training = arr[indexes.astype(np.bool)]
建议here,但它没有给出清晰的分离。我在训练和测试集中都得到了元素[5,6,7,8]。
training = arr[indexes.astype(np.bool)]
testing
Out[101]:
array([[13, 14, 15, 16],
[ 5, 6, 7, 8],
[17, 18, 19, 20]])
training
Out[102]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
知道我做错了什么吗?感谢。
答案 0 :(得分:7)
从numpy数组中删除索引行:
arr = np.delete(arr, indexes, axis=0)
答案 1 :(得分:2)
一种方法是使用np.setdiff1d
获取剩余的行索引,然后使用这些行索引来获得所需的输出 -
out = arr[np.setdiff1d(np.arange(arr.shape[0]), indexes)]
或使用np.in1d
来利用boolean indexing
-
out = arr[~np.in1d(np.arange(arr.shape[0]), indexes)]