我不明白以下问题。我想删除X和y(两个numpy数组)中的所有元素,其中y == 3.所以如果y == 3的第三和第五个元素,我想从X和y中删除第三个和第五个元素。
print X.shape
print y.shape
print len(np.where(y == 3))
X = np.delete(X, np.where(y == 3), axis=0)
y = np.delete(y, np.where(y == 3), axis=0)
print X.shape
print y.shape
输出如下:
(337L, 10000L)
(337L, 1L)
2
(334L, 10000L)
(334L, 1L)
它如何删除3个元素但只有2个匹配条件?我做错了什么?
答案 0 :(得分:1)
我认为问题是y是2d,所以np.where
返回一个2项列表,第一个元素是y
元素的行索引数组,它们是3,第二个element是这些元素的列索引。例如,如果您定义y = np.arange(10)[:,None]
,则显然只有一个元素是三个,但np.where(y == 3)
返回(array([3]), array([0]))
,其长度为2。
您有没有理由不使用下面更简单的解决方案?
X = X[y[:, 0] != 3]
y = y[y[:, 0] != 3]