Как найти последний действительный индекс в списке, кроме NaN - PullRequest
1 голос
/ 16 мая 2019

Моя конечная цель - найти действительные списки, удовлетворяющие некоторому условию.У меня есть несколько литов, которые имеют несколько значений float и np.nan.Мне нравится выбирать списки, которые не имеют значения nan в некотором диапазоне.

Вот один из списков, которые у меня есть.

list = 
[          nan  -38.10940798  -52.15497422  -68.94011301 -112.58576732
 -110.27810095 -110.61354039 -131.82121921 -137.27076671 -134.34755197
 -125.4644195  -128.78669345 -134.30116567 -136.47002098 -142.14361377
 -142.86356029 -136.64266941 -128.34936325 -121.94468169 -131.72934853
 -135.34244008 -134.77085591 -137.3350188  -139.08824299 -140.45602586
 -143.47342506 -142.41400071 -139.16437999 -139.41824163 -141.88900778
 -142.26951505 -142.5739776  -142.6418401  -144.03415115 -142.03099862
 -141.96427292 -139.52750524 -137.56815712           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan]

Итак, мне нравится фильтровать этосписок, потому что в этом списке есть nan от индекса -25 до индекса -1

Я пытался

if np.nansum(list[-25:-1]) == 0
    list = np.nan

Я пытался

if np.nanmean(list[-25:-1]) == 0
    list = np.nan

не сработало в обоих случаях.

У меня есть несколько списков, в которых нет nan и есть nan.Итак, что я хочу сделать, это 1) выбрать список, в котором есть nan из точного диапазона 2) и сделать этот список, содержащий все nan

1 Ответ

1 голос
/ 16 мая 2019

Я вижу, что вы используете NumPy, поэтому вот один из подходов:

s = '''          nan  -38.10940798  -52.15497422  -68.94011301 -112.58576732
 -110.27810095 -110.61354039 -131.82121921 -137.27076671 -134.34755197
 -125.4644195  -128.78669345 -134.30116567 -136.47002098 -142.14361377
 -142.86356029 -136.64266941 -128.34936325 -121.94468169 -131.72934853
 -135.34244008 -134.77085591 -137.3350188  -139.08824299 -140.45602586
 -143.47342506 -142.41400071 -139.16437999 -139.41824163 -141.88900778
 -142.26951505 -142.5739776  -142.6418401  -144.03415115 -142.03099862
 -141.96427292 -139.52750524 -137.56815712           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan
           nan           nan           nan           nan           nan'''

a = np.fromstring(s, sep=' ')
if np.isnan(a[-25:-1]).all(): # check if all values in range are NaN
    a[:] = np.nan             # Set all values to NaN

Чтобы найти последний действительный индекс, который вы можете сделать:

len(a) - (~np.isnan(a))[::-1].argmax()
# 38
...