Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用布尔数的NumPy数组删除/过滤另一个NumPy数组的行?_Python_Arrays_Numpy_Mask - Fatal编程技术网

Python 如何使用布尔数的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

我有一个这样的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([[ 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()]