Listenverständnis und logische Indexierung

8

Langsam Übergang von Matlab zu Python ...

Ich habe diese Liste des Formulars

%Vor%

und eine weitere Liste mit der gleichen Anzahl von Elementen

%Vor%

Ich versuche, die Elemente von list1 zu extrahieren, die keine Nan-Werte enthalten, und die entsprechenden Elemente in list2, d. h. das Ergebnis sollte lauten:

%Vor%

In Matlab ist dies einfach mit logischer Indizierung möglich.

Hier habe ich das Gefühl, dass das Verständnis der Liste in irgendeiner Form den Trick bringt, aber ich stecke fest:

%Vor%

was offensichtlich für list2 keinen Sinn macht.

Alternativ funktioniert der folgende Versuch der logischen Indizierung nicht ("Indizes müssen ganze Zahlen sein, keine Listen")

%Vor%

Ich bin mir sicher, dass es schmerzhaft trivial ist, aber ich kann es nicht herausfinden, Hilfe geschätzt!

    
IMK 19.06.2013, 15:47
quelle

3 Antworten

6

Sie können zip verwenden.

zip gibt die Elemente des gleichen Index aus den übergebenen Iterablen zurück.

%Vor%

Entpacken Sie jetzt out , um die erforderliche Ausgabe zu erhalten:

%Vor%

Hilfe zu zip :

%Vor%

Sie können itertools.izip verwenden, wenn Sie eine speichereffiziente Lösung wünschen, da sie einen Iterator zurückgibt.

    
Ashwini Chaudhary 19.06.2013, 15:53
quelle
2

Sie können das einfach tun:

%Vor%

Von wo Sie jeden Wert extrahieren können:

%Vor%

Es wird empfohlen, das Modul izip from itertools zu verwenden. Es verwendet Iteratoren, die je nach Problem eine große Menge an Speicher speichern können.

Anstelle von ~ können Sie numpy.logical_not() verwenden, was besser lesbar ist.

Willkommen bei Python!

    
Saullo Castro 19.06.2013 15:57
quelle
0

Das sollte funktionieren. Wir prüfen, ob eine Zahl NaN ist oder nicht math.isnan .

Wir fügen ein Element in list1_clean und list2_clean ein, wenn keines der Elemente in der ursprünglichen Liste NaN ist. Um dies zu überprüfen, verwenden wir die Funktion any , die% co_de zurückgibt %, wenn ein Element des Iterablen True ist.

%Vor%

Um es kleiner zu machen und die Verwendung von True zu vermeiden, könnten Sie dies tun,

%Vor%

zip Funktion - & gt;

%Vor%

any Funktion - & gt;

%Vor%     
Sukrit Kalra 19.06.2013 15:56
quelle

Tags und Links