python - Numpy:根据 bool 数组选择元素

标签 python arrays numpy mask

我有一个数组和一个 bool 数组(作为一种热编码)

a = np.arange(12).reshape(4,3)
b = np.array([
    [1,0,0],
    [0,1,0],
    [0,0,1],
    [0,0,1],
], dtype=bool)

print(a)
print(b)
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]]
# [[ True False False]
#  [False  True False]
#  [False False  True]
#  [False False  True]]

我想使用 bool 数组来选择元素

print(a[:, [True, False, False]])
# array([[0],
#        [3],
#        [6],
#        [9]])

print(a[:, [False, True, False]])
# array([[ 1],
#        [ 4],
#        [ 7],
#        [10]])

但是这会根据所有行的相同模板 bool 值进行选择。我想在每行的基础上执行此操作:

print(a[:, b])
# IndexError: too many indices for array

我应该在...中放入什么,这样我就会得到:

print(a[:, ...])
# array([[0],
#        [4],
#        [8],
#        [11]])

编辑:这类似于臭名昭著的 CS231 中使用的内容。类(class):

dscores = a
num_examples = 4 
# They had 300
y = b
dscores[range(num_examples),y]
# equivalent to
# a{:,b]

编辑2:在CS231中例如,y 是一维的,不是热编码的!

他们正在做dscores[[rowIdx],[columnIdx]]

最佳答案

通过b过滤后广播它

a[b][:,None]
Out[168]: 
array([[ 0],
       [ 4],
       [ 8],
       [11]])

或者

a[b,None]
Out[174]: 
array([[ 0],
       [ 4],
       [ 8],
       [11]])

关于python - Numpy:根据 bool 数组选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55635473/

相关文章:

python - JSON解码错误: Extra data: line 1 column 228 (char 227)

java - 在JAVA中将base64图像转换为Sql Blob

javascript - jQuery:从 JSON 创建数组

python - 如何获得 python 模块的点符号?

python - 如何在 Django 中正确设置 URLConf(正则表达式?)

python - scikit-learn 分割数据集中的随机状态

java - 转换数组(Component 到 JMenuItem)不起作用

arrays - 您将如何拆分元素给出分区大小的 numpy 数组?

python - 使用 pip freeze 安装 numpy

python - R 的 `filter` 的 NumPy 模拟