【问题标题】:Python effect of boolean values as index (a[a==0] = 1)布尔值作为索引的 Python 效果 (a[a==0] = 1)
【发布时间】:2019-12-12 11:11:06
【问题描述】:

我目前正在实现一些我在 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 如此为什么还要费心去做呢?

我在这里错过了什么?

【问题讨论】:

标签: python arrays numpy indexing boolean-indexing


【解决方案1】:

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

I == 144 生成一个与I 具有相同维度的逻辑数组,其中I 中所有位置为144 的位置为true,所有其他位置为false

(其他表达式也一样。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多