我有一个像这样的NumPy数组:
array([[ True],
[ True],
[ True],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False],
[False]], dtype=bool)
我想使用这个数组来过滤另一个数组的行,如下所示:
array([[-0.45556594, 0.46623859],
[-1.80758847, -0.08109728],
[-0.9792373 , -0.15958186],
[ 4.58101272, -0.02224513],
[-1.64387422, -0.03813 ],
[-1.8175146 , -0.07419429],
[-1.15527867, -0.1074057 ],
[-1.48261467, -0.00875623],
[ 2.23701103, 0.67834847],
[ 1.45440669, -0.62921477],
[-1.13694557, 0.07002631],
[ 1.0645533 , 0.21917462],
[-0.03102173, 0.18059074],
[-1.16885461, -0.06968157],
[-0.51789417, -0.05855351],
[ 4.23881128, -0.30072904],
[-1.37940507, -0.06478938]])
应用过滤器会产生以下数组,只有前三行:
array([[-0.45556594, 0.46623859],
[-1.80758847, -0.08109728],
[-0.9792373 , -0.15958186]])
如何做到这一点?当我尝试执行B[A]
之类的操作时,其中A
是过滤器数组而B
是另一个,我只得到第一列。
答案 0 :(得分:1)
您正在尝试选择整行,因此您需要使用一维数组进行选择。如评论中所述,您可以使用numpy.ravel()
来理顺您的bool数组,并将其应用于b
:
b[a.ravel()]
您还可以明确选择a
的第一列,并将其应用于b
:
b[a[:, 0]])
测试代码:
a = np.array(
[[ True],
[ True],
[ True],
[False],
[False],
[False]], dtype=bool)
b = np.array(
[[-0.45556594, 0.46623859],
[-1.80758847, -0.08109728],
[-0.9792373 , -0.15958186],
[ 4.58101272, -0.02224513],
[-1.64387422, -0.03813 ],
[-1.37940507, -0.06478938]])
print(b[a.ravel()])
print(b[a[:, 0]])
<强>结果:强>
[[-0.45556594 0.46623859]
[-1.80758847 -0.08109728]
[-0.9792373 -0.15958186]]
[[-0.45556594 0.46623859]
[-1.80758847 -0.08109728]
[-0.9792373 -0.15958186]]
答案 1 :(得分:0)
您还可以使用np.where查找符合条件的行索引:
b[np.where(a)[0]]