#python #arrays #list #numpy
#python #массивы #Список #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., 0., 6.],
[2., 3., 3.]])]
filter= [array([2., 0., 5.]),
array([3., -1.])]
Я хочу сохранять только значения каждого моего массива data
, чтобы их второй столбец ( data[i][:,1]
) был равен одному значению того же массива из filter
(все значения filter[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)
Я заранее признателен за любую помощь и вклад.
Комментарии:
1. Почему у вас есть вложенные массивы в фильтре?
2. Уважаемый @Dani Mesejo, потому что в некоторых случаях в качестве фильтра могут применяться разные числа. Для каждого массива, хранящегося в моих данных, у меня есть массив в качестве фильтра. В некоторых случаях моим фильтром может быть неровный список, поэтому я решил добавить все массивы (оба
filter
иdata
) в виде списка.3. Я понимаю, но почему это
array([[3., -1.]])
, а не простоarray([3., -1.])
?4. Извините, это опечатка. Я допустил большую ошибку.
array([3., -1.])
правильно.
Ответ №1:
Вы можете использовать np.isin для создания масок, а затем фильтровать с использованием этих масок:
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.]]