Python Numpy:基于bool数组拾取元素
我有一个数组和一个布尔数组(作为一个热编码)Python Numpy:基于bool数组拾取元素,python,arrays,numpy,mask,Python,Arrays,Numpy,Mask,我有一个数组和一个布尔数组(作为一个热编码) a=np.arange(12)。重塑(4,3) b=np.array([ [1,0,0], [0,1,0], [0,0,1], [0,0,1], ],dtype=bool) 印刷品(a) 印刷品(b) # [[ 0 1 2] # [ 3 4 5] # [ 6 7 8] # [ 9 10 11]] #[[真假假] #[假-真-假] #[假-假-真] #[假-假-真]] 我想用一个布尔数组来选择元素 打印(a[:,[True,Fals
a=np.arange(12)。重塑(4,3)
b=np.array([
[1,0,0],
[0,1,0],
[0,0,1],
[0,0,1],
],dtype=bool)
印刷品(a)
印刷品(b)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
#[[真假假]
#[假-真-假]
#[假-假-真]
#[假-假-真]]
我想用一个布尔数组来选择元素
打印(a[:,[True,False,False]]
#数组([[0],
# [3],
# [6],
# [9]])
打印(a[:,[False,True,False]]
#数组([[1],
# [ 4],
# [ 7],
# [10]])
但这将基于所有行的相同模板布尔值进行拾取。我希望在每行的基础上执行此操作:
打印(a[:,b])
#索引器:数组的索引太多
我应该在…
中输入什么,以便得到:
打印(a[:,…])
#数组([[0],
# [4],
# [8],
# [11]])
编辑:这与臭名昭著的课程中使用的内容类似:
dscores=a
num_示例=4
#他们有300人
y=b
dscores[范围(num_示例),y]
#相当于
#a{,b]
编辑2:在示例中,y
是一维的,不是热编码的
在通过
b
广播过滤后,他们正在做dscores[[rowIdx],[columnIdx]]
a[b][:,None]
Out[168]:
array([[ 0],
[ 4],
[ 8],
[11]])
或
这是一种替代方法。请注意,与高级索引相比,这是低效的。这只是出于教学目的,并说明可以使用多种方法解决问题
In [275]: np.add.reduce(a*b, axis=1, keepdims=True)
Out[275]:
array([[ 0],
[ 4],
[ 8],
[11]])
我试图从中理解
dscores[range(num_示例),y]-=1
,这是当时的旧语法?@SaravanabalagiRamachandran我觉得y是一维数组,对吗?哦,是的,对不起,我以为它们有一个热编码!它们确实是一维的
In [275]: np.add.reduce(a*b, axis=1, keepdims=True)
Out[275]:
array([[ 0],
[ 4],
[ 8],
[11]])