2017-02-20 5 views
0

Ich frage mich, ob es eine Möglichkeit gibt, diesen Code arbeiten zu lassen. Hoffentlich ist klar, was ich machen möchte.np.column_stack() Verwendung innerhalb der Schleife

Ich hoffte, dass nach jeder Iteration eine neue Zeile innerhalb des Arrays erstellt würde. Stattdessen scheint es so, als ob die vorherige Zeile überschrieben wurde - nicht überraschend.

Gibt es eine andere Möglichkeit, dies zu tun?

list1 = [4, 5] 

for j in list1: 

      one = j + 1 
      two = j + 2 
      array = np.column_stack((one, two)) 

print(array) 

#Output 
[[ 6 7]] 

#What I actually want 
[[ 5 6] 
[ 6 7]] 

Antwort

0

Die natürliche Art und Weise würde dies in Python zu tun:

import numpy 

list1 = [4,5] 
array = numpy.column_stack((j+1,j+2) for j in list1) 

print(array) 

Einige Leute Kodierung als pythonic auf diese Art und Weise beziehen, während der Annäherung an ähnlicher ist, was man in C tun würde ++ oder Java . Sie werden sich daran gewöhnen, wenn Sie weiterhin mit Python arbeiten.

Wenn Sie die Dokumentation von numpy.colum_stack lesen, werden Sie sehen, dass das Funktionsargument ein Tupel von Spalten ist, die in ein 2d-Array "gestapelt" werden. dieses Tupel als

[(j+1,j+2) for j in list1] 

(was auch eine gültige Zeile von Python-Code) erzeugt werden. Innerhalb eines Funktionsarguments können wir die eckigen Klammern weglassen.

Ihr Beispiel funktioniert nicht, weil Sie Array in jeder einzelnen Schleifeniteration überschreiben. Ich empfehle, einen Debugger zu verwenden ... oder einen Ausdruck (Array) innerhalb der for-Schleife hinzuzufügen, um besser zu verstehen, was vor sich geht.

+0

Danke. Dies scheint nicht in meinem Code zu funktionieren, obwohl –

+0

Um sicher zu sein, habe ich gerade den Code in Python2.7 und Python3.5 getestet und es funktioniert wie erwartet. Ich habe die Erklärung erweitert und darauf hingewiesen, warum dein Code nicht funktioniert. – thebrandre

+0

Hey danke! Es funktioniert, aber nicht wirklich für die Zwecke meines Codes. Der obige Code ist ein kleines Beispiel für meinen Code. Meine for-Schleife ist viel größer und enthält viele Dinge. Ich hatte gehofft, dass es einen ähnlichen Weg geben würde, wie ich es vorgeschlagen habe. –

Verwandte Themen