排除一些元素的Numpy数组

6
training_images = np.array([i for i in images if i not in validation_images])

上面是错误的(如下评论所指出)。有什么正确且更快的方法吗?
我的验证图像只是
 validation_images = images[::6]

图片的形状为(60000, 784)。这是一个numpy数组。

当前方法不可接受,因为速度太慢。


注意:in对于数组没有意义,所以你当前的代码可能并不是你想要的。另外,这个问题应该如何处理重复项?你只是想删除每个索引是6的倍数的行吗? - user2357112
我不知道那个。但是无论如何,我想做我原本打算在那里做的事情。是的,我不关心重复项,我只想为我的验证集每6行删除一行。 - ajfbiw.s
2个回答

5

我总是使用布尔掩码来处理这类事情,你可以考虑:

# Mask every sixth row
mask = (np.arange(images.shape[0]) % 6) != 0

# Only use the not masked images
training_images = images[mask]

验证集将包括每个掩码元素:
validation_images = images[~mask]

numpy数组上的数学运算是逐元素进行的,因此对模数%)的操作将在每个元素上执行,并返回一个具有相同形状的另一个数组。!= 0 也是逐元素工作的,它比较模数是否为零。因此,掩码只是一个包含False的数组,其中值不是int * 6,而是True

np.arange(images.shape[0]) 给你一个数组,为什么你能做 (THIS %6) != 0?你在那里做什么,为什么它有效?你能解释一下吗? - ajfbiw.s
我在末尾编辑了一小段文字,解释了操作的背景。 - MSeifert

0
Z = np.linspace(0,1,12)[1:-1] 

#Create a vector of size 10 with values ranging from 0 to 1, both excluded

print(Z)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接