我目前正在实现一些我在github上看到的代码。

https://gist.github.com/karpathy/a4166c7fe253700972fcbc77e4ea32c5

这里的兴趣点如下:

def prepro(I):
   """ prepro 210x160x3 uint8 frame into 6400 (80x80) 1D
   float vector """
   I = I[35:195] # crop
   I = I[::2,::2,0] # downsample by factor of 2
   I[I == 144] = 0 # erase background (background type 1)
   I[I == 109] = 0 # erase background (background type 2)
   I[I != 0] = 1 # everything else (paddles, ball) just set to 1
   return I.astype(np.float).ravel()


作者在这里对图像进行预处理,以训练神经网络。我感到困惑的部分是:

I[I == 144] = 0 # erase background (background type 1)
I[I == 109] = 0 # erase background (background type 2)
I[I != 0] = 1 # everything else (paddles, ball) just set


我认为作者希望将列表中具有值144(109,而不是0)的所有元素设置为特定值。但是,如果我是对的,则布尔值在python中仅代表0或1。因此,将列表与整数进行比较将始终为False,因此为0。

这使I[I==x] <=> I[0] : x is integer为何还要这样做呢?

我在这里想念什么?

最佳答案

NumPy数组有点不同;它们的用法类似于MATLAB中的用法。

I == 144产生一个与I尺寸相同的逻辑数组,其中144I的所有位置均为true,所有其他位置false

(其他表达式也一样。)

使用这样的逻辑数组进行索引意味着索引为true的所有位置都将受到分配的影响。

10-08 02:24