Numpy数组排除了一些元素

ajf*_*w.s 6 python arrays numpy

training_images = np.array([i for i in images if i not in validation_images])
Run Code Online (Sandbox Code Playgroud)

以上是错误的(如下面的评论中所述).这样做的正确和快捷方式是什么?

我的validation_images只是

 validation_images = images[::6]
Run Code Online (Sandbox Code Playgroud)

并且图像的形状是(60000,784).这是一个numpy数组.

目前的方法是不可接受的,因为它太慢了.

MSe*_*ert 5

我总是对这些事情使用布尔掩码,你可以考虑:

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

# Only use the not masked images
training_images = images[mask]
Run Code Online (Sandbox Code Playgroud)

验证集将是每个被屏蔽的元素:

validation_images = images[~mask]
Run Code Online (Sandbox Code Playgroud)

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