如何将 NumPy 布尔数组用于 remove/filter 行另一个 NumPy 数组?
How can a NumPy array of booleans be used to remove/filter rows of another NumPy array?
我有一个这样的 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
是另一个过滤器数组,我只得到第一列。
您正在尝试 select 整行,因此您需要一个一维数组来 select。如评论中所述,您可以使用 numpy.ravel()
来理顺您的 bool 数组并将其应用于 b
并使用:
b[a.ravel()]
您还可以显式 select 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]]
您还可以使用 np.where 查找符合条件的行索引:
b[np.where(a)[0]]
我有一个这样的 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
是另一个过滤器数组,我只得到第一列。
您正在尝试 select 整行,因此您需要一个一维数组来 select。如评论中所述,您可以使用 numpy.ravel()
来理顺您的 bool 数组并将其应用于 b
并使用:
b[a.ravel()]
您还可以显式 select 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]]
您还可以使用 np.where 查找符合条件的行索引:
b[np.where(a)[0]]