Вы можете использовать маску с np.isin
, затем заменить массив на маску. Это рекомендуемый метод от numpy :
Часто предпочтительнее использовать логическую маску.Например:
mask = np.ones (len (arr), dtype = bool) mask [[0,2,4]] = Ложный результат = arr [mask, ...]
Эквивалентно np.delete(arr, [0,2,4], axis=0)
, но допускает дальнейшее использование mask
.
Пример:
import numpy as np
#step 1: create an array with values and years (for illustration)
values = np.random.random(10)
years = np.array([2001, 2002, 2002, 2003, 2001,
2004, 2005, 2001, 2009, 2008])
master = np.vstack((values, years)).T
print(master[:,1]) # this will print master second column, i.e. years
>> ([2001, 2002, 2002, 2003, 2001, 2004, 2005, 2001, 2009, 2008])
# step 2: specify what years I want, then filter using a mask
filt_years = [2001, 2002]
mask = np.isin(master[:,1], filt_years)
print(mask) #False values will be deleted
>> [ True True True False True False False True False False]
#step 3: apply mask and replace master (easier than deleting)
master = master[mask]
# or if you want to use delete:
master = np.delete(master, np.arange(len(master))[~mask], axis=0)
Пример объединения лет и месяцев и использования logical_and
(т.е. месяцы и годы должны быть в выбранных наборах):
months = np.array([1,1,2,2,1,4,5,8,9,5])
master = np.vstack((values, months, years)).T
filt_years = [2001, 2002]
filt_months = [1,2]
mask = np.logical_and(np.isin(master[:,2], filt_years), np.isin(master[:,1], filt_months))
master = master[mask]