我有以下numpy数组: (nx1)的真值表,以及(nxk)的矩阵,其中n为5,k为2。
btable = np.array([[True],[False],[False],[True],[True]])
bb=np.array([[1.842,4.607],[5.659,4.799],[6.352,3.290],[2.904,4.612],[3.231,4.939]])
我想根据btable中的索引值提取bb中的向量。
我尝试了choicebb=bb[btable==True]
,它获得了结果
[ 1.84207953 2.90401653 3.23197916]
choicebb=bb[btable]
也会得到相同的结果。
我想要的是
[[1.842,4.607]
[2.904,4.612]
[3.231,4.939]]
我也试过
choicebb=bb[btable==True,:]
然后我会得到
---> 13 choicebb = bb [btable == True,:]
14 print(choicebb)
IndexError:数组索引太多
这可以使用choicebb=bb(btable,:);
答案 0 :(得分:1)
使用1D
获取掩码的np.ravel()
版本,或者使用[:,0]
切出第一列并将其用于逻辑索引到数据数组中,如下所示 -
bb[btable.ravel()]
bb[btable[:,0]]
请注意,bb[btable.ravel()]
基本上是 - bb[btable.ravel(),:]
。在NumPy中,如果要选择所有元素,我们可以跳过提及尾随轴,这就是为什么它被简化为bb[btable.ravel()]
。
解释:要索引到单个轴并选择沿其余轴的所有元素,我们需要沿着该轴输入一维数组(布尔或整数数组),沿着剩余的轴使用:
。在我们的例子中,我们将索引到第一个轴来选择行,因此我们需要沿着该轴输入一个布尔数组,并沿着其余轴输入:
。
当我们提供掩码的2D
版本时,它会沿着相应的多个轴进行索引。因此,当我们输入(N,1)
形状的布尔数组时,我们选择正确的行,但也只选择第一列元素,这不是预期的输出。