Die Operation auf numpy Arrays enthält Zeilen mit unterschiedlicher Größe

8

Ich habe zwei Listen, die so aussehen:

%Vor%

, die ich Element für Element für eine Ausgabe wie folgt abziehen möchte:

%Vor%

Um dies zu tun, konvertiere ich jedes von a und b in Arrays und subtrahiere sie, die ich benutze:

%Vor%

Die Ausgabe gibt mir nur den Fehler:

  

Nicht unterstützter Operandentyp für: 'Liste' und 'Liste'

Was mache ich falsch? Sollte nicht der Befehl np.array die Konvertierung in das Array sicherstellen?

    
umpalumpa__ 11.08.2016, 10:49
quelle

7 Antworten

1

Sie können versuchen:

%Vor%

Or Die zweite Methode verwendet map :

%Vor%     
Harsha 11.08.2016, 11:11
quelle
5

Hier ist ein numpythischer Weg:

%Vor%

Da Sie die Arrays nicht mit anderen Formen subtrahieren können, können Sie Ihre Arrays mit np.hstack() abflachen und dann Ihre abgeflachten Arrays subtrahieren und dann auf der Grundlage der vorherigen Form neu formen.

    
Kasramvd 11.08.2016 11:19
quelle
1

Die Dimensionen Ihrer beiden Arrays stimmen nicht überein, d. h. die ersten beiden Unterlisten von a haben 4 Elemente, aber die dritte hat 5 und ditto mit b . Wenn Sie die Listen in numpy arrays konvertieren, gibt numpy automatisch so etwas wie folgt aus:

%Vor%

Sie müssen sicherstellen, dass alle Ihre Unterlisten die gleiche Anzahl von Elementen haben, dann funktioniert Ihr Code:

%Vor%     
tttthomasssss 11.08.2016 10:59
quelle
0

Ohne NumPy:

%Vor%

Siehe auch diese Frage und diese Frage .

    
Matthias Wiehl 11.08.2016 11:12
quelle
0

Was ist mit einer benutzerdefinierten Funktion wie:

? %Vor%     
BPL 11.08.2016 11:14
quelle
0

Sie erhalten den Fehler, weil Ihr Code versucht, die Unterliste von der Unterliste zu subtrahieren. Wenn Sie das Problem lösen wollen, können Sie das auch folgendermaßen tun:

%Vor%     
sjaiswal 11.08.2016 11:19
quelle
0

Ein geschachteltes Listenverständnis wird die Aufgabe erfüllen:

%Vor%

Das Problem mit np.array(a)-np.array(b) besteht darin, dass sich die Unterlisten in der Länge unterscheiden, also sind die resultierenden Arrays Objekttypen - Arrays von Listen

%Vor%

Subtraction iteriert gerade über das äußere Array, trifft aber auf ein Problem, wenn eine Subliste von einer anderen subtrahiert wird - daher die Fehlermeldung.

Wenn ich die Eingaben Arrays von Arrays gemacht habe, wird die Subtraktion funktionieren

%Vor%

Sie können nicht zählen, dass Array-Operationen an Objekt-Dtyp-Arrays arbeiten. Aber in diesem Fall ist subtraction für die Subarrays definiert, damit es die Verschachtelung verarbeiten kann.

Eine weitere Möglichkeit, die Verschachtelung durchzuführen, ist die Verwendung von np.subtract . Dies ist eine ufunc Version von - und wendet np.asarray nach Bedarf auf seine Eingaben an:

%Vor%

Beachten Sie, dass diese Array-Berechnungen Arrays oder eine Liste von Arrays zurückgeben. Das Zurückdrehen der inneren Arrays in Listen erfordert eine Iteration.

Wenn Sie mit Listen beginnen, spart die Konvertierung in Arrays oft nicht viel Zeit. Array-Berechnungen können schneller sein, aber dies kompensiert nicht den Overhead beim Erstellen der Arrays an erster Stelle.

Wenn ich die Eingaben auf die gleiche Länge padde, dann funktioniert die einfache Array-Subtraktion und erzeugt ein 2d-Array.

%Vor%     
hpaulj 11.08.2016 15:59
quelle

Tags und Links