如何从numpy数组中删除一些特定元素?说我有
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9])
Run Code Online (Sandbox Code Playgroud)
然后我想删除3,4,7的a.我所知道的是值(index=[2,3,6])的索引.
我有这样的数据集:
[[0,1],
[0,2],
[0,3],
[0,4],
[1,5],
[1,6],
[1,7],
[2,8],
[2,9]]
Run Code Online (Sandbox Code Playgroud)
我需要删除第一列定义的数据的每个子视图的第一个元素.所以首先我得到第一列中有0的所有元素,并删除第一行:[0,1].然后我在第一列中得到1的元素并删除第一行[1,5],下一步我删除[2,8],依此类推.最后,我想有一个像这样的数据集:
[[0,2],
[0,3],
[0,4],
[1,6],
[1,7],
[2,9]]
Run Code Online (Sandbox Code Playgroud)
编辑:这可以在numpy中完成吗?我的数据集非常大,因此所有元素的循环至少需要4分钟才能完成.
在我的数据集中,我接近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]])
Run Code Online (Sandbox Code Playgroud)
我可以对3行进行随机抽样,如下所示:
indexes = np.random.choice(np.arange(arr.shape[0]), int(arr.shape[0]/2), replace=False)
Run Code Online (Sandbox Code Playgroud)
使用这些索引,我可以选择我的测试用例如下:
testing = arr[indexes]
Run Code Online (Sandbox Code Playgroud)
我想删除这些索引处的行,我可以将剩余的元素用于我的训练集.
从这里的帖子看来,似乎training = np.delete(arr, indexes)应该这样做.但我得到了1d阵列.
我也试过的建议在这里使用training = arr[indexes.astype(np.bool)],但它并没有给出清晰的分离.我在训练和测试集中都得到了元素[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]])
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?谢谢.