Python 布尔值作为索引的效果 (a[a==0] = 1)
Python effect of boolean values as index (a[a==0] = 1)
我目前正在实施我在 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
具有相同维度的逻辑数组,其中 I
中的所有位置 144
都是 true
,所有其他false
.
(其他表达式同理)
使用这样的逻辑数组进行索引,意味着索引为true
的所有位置都会被赋值
我目前正在实施我在 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
具有相同维度的逻辑数组,其中 I
中的所有位置 144
都是 true
,所有其他false
.
(其他表达式同理)
使用这样的逻辑数组进行索引,意味着索引为true
的所有位置都会被赋值