2016-12-13 3 views
0

Предположим, у меня есть три списка, в которых один содержит NaN (я думаю, что они «NaNs», они печатаются как «-» из предыдущей операции с маской в ​​виде массива):Удалить элементы из списков, когда индексом является один список NaN

a = [1,2,3,4,5] 
b = [6,7,--,9,--] 
c = [6,7,8,9,10] 

Я хотел бы выполнить операцию, которая выполняет итерацию через b, и удаляет индексы из всех списков, где b[i]=NaN. Я имею в виду что-то вроде этого:

for i in range(0,len(b): 
    if b[i] = NaN: 
     del.a[i] etc 

б генерируется из маскирующего с при некоторых условиях ранее в моем коде, что-то вроде этого:

b = np.ma.MaskedArray(c, condition) 

Спасибо!

+0

У вас есть некоторые синтаксические ошибки там : например, 'if b [i] = Nan'. Он должен иметь double ==. Кроме этого, если вы хотите удалить значения NaN, вы можете сделать то, что написано здесь: http://stackoverflow.com/a/11620982/966922 – javidgon

+0

Возможный дубликат [Удаление значений nan из массива] (http: // stackoverflow .com/вопросы/11620914/удаление-нан-значения из-в-массива) – iFlo

ответ

1

Это легко сделать с помощью NumPy:

import numpy as np 
a = np.array([1,2,3,4,5]) 
b = np.array([6,7,np.NaN,9,np.NaN]) 
c = np.array([6,7,8,9,10]) 

where_are_nans = np.isnan(b) 
filtered_array = a[~where_are_nans] #note the ~ negation 
print(filtered_array) 

И как вы можете легко увидеть, он возвращает:

[1 2 4]