从numpy数组中删除选定索引处的行

时间:2015-05-20 05:02:00

标签: python arrays numpy

在我的数据集中,我已接近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]])

知道我做错了什么吗?感谢。

2 个答案:

答案 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)]