Python 如何使用布尔数的NumPy数组删除/过滤另一个NumPy数组的行?
我有一个这样的NumPy阵列:Python 如何使用布尔数的NumPy数组删除/过滤另一个NumPy数组的行?,python,arrays,numpy,mask,Python,Arrays,Numpy,Mask,我有一个这样的NumPy阵列: array([[ True], [ True], [ True], [False], [False], [False], [False], [False], [False], [False], [False], [False], [False], [False], [Fa
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([[ 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
是另一个数组,我只得到第一列。您试图选择整行,因此您需要使用一维数组来选择。如注释中所述,您可以使用以下方法理顺布尔数组并将其应用于b
:
b[a.ravel()]
b[a[:, 0]])
您还可以显式选择a
的第一列,并使用以下命令将其应用于b
:
b[a.ravel()]
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]]
结果:
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]]
您试图选择整行,因此需要使用一维数组进行选择。如注释中所述,您可以使用以下方法理顺布尔数组并将其应用于
b
:
b[a.ravel()]
b[a[:, 0]])
您还可以显式选择a
的第一列,并使用以下命令将其应用于b
:
b[a.ravel()]
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]]
结果:
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]]
还可以使用np.where查找符合条件的行索引:
b[np.where(a)[0]]
使用
1D
版本的A
:B[A.ravel()]
。使用1D
版本的A
:B[A.ravel()]
。