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.])
正确。