Python 如何筛选存储为两个列表的数组

Python 如何筛选存储为两个列表的数组,python,arrays,list,numpy,Python,Arrays,List,Numpy,我必须列出数组,一个是我的所有数据,另一个是过滤器: data= [array([[12., 2., 7.], [9., -1., 0.], [2., 0., 4.], [14., 2., 1.2]]), array([[11., 3., 1.], [2., 5., 0.], [1., -1., 1.], [-8.,

我必须列出数组,一个是我的所有数据,另一个是过滤器:

data= [array([[12., 2., 7.],
              [9., -1., 0.],
              [2., 0., 4.],
              [14., 2., 1.2]]),
       array([[11., 3., 1.],
              [2., 5., 0.],
              [1., -1., 1.],
              [-8., 0., 6.],
              [2., 3., 3.]])]

filter= [array([2., 0., 5.]),
         array([3., -1.])]
我只想保留我的
数据的每个数组的值,它们的第二列(
数据[I][:,1]
)等于
过滤器中相同数组的值之一(所有
过滤器[I]
)。我希望有以下输出:

out = [array([[12., 2., 7.],
              [2., 0., 4.],
              [14., 2., 1.2]]),
       array([[11., 3., 1.],
              [1., -1., 1.],
              [2., 3., 3.]])]
我尝试了以下代码,但未成功:

out=[]
for a in data:
    for b in filter:
        for c in b:
            if a[:,1]==c:
                bb=a[:,c]
                out=np.append(data,bb)
我感谢您的帮助和贡献。

您可以使用创建遮罩,然后使用这些遮罩进行过滤:

import numpy as np

data = [np.array([[12., 2., 7.],
                  [9., -1., 0.],
                  [2., 0., 4.],
                  [14., 2., 1.2]]),
        np.array([[11., 3., 1.],
                  [2., 5., 0.],
                  [1., -1., 1.],
                  [-8., 0., 6.],
                  [2., 3., 3.]])]

filter_data = [np.array([2., 0., 5.]),
               np.array([3., -1.])]

# compute the masks
masks = [np.isin(arr[:, 1], filter_arr) for arr, filter_arr in zip(data, filter_data)]

# filter using the masks
result = [arr[mask] for arr, mask in zip(data, masks)]

for filtered_arr in result:
    print(filtered_arr)
输出

[[12.   2.   7. ]
 [ 2.   0.   4. ]
 [14.   2.   1.2]]
[[11.  3.  1.]
 [ 1. -1.  1.]
 [ 2.  3.  3.]]

为什么在过滤器中有嵌套数组?亲爱的@Dani Mesejo,因为在某些情况下,不同的数字可以用作过滤器。对于存储在数据中的每个数组,我都有一个数组作为过滤器。在某些情况下,我的过滤器可能是锯齿状列表,因此我决定将所有数组(包括
过滤器
数据
)添加为列表。我理解,但为什么这
数组([[3.,-1.]])
而不是
数组([3.,-1.])
?对不起,这是一个打字错误。我犯了一个大错误<代码>数组([3.,-1.])
正确。