2016-10-22 1 views
-1

Ich versuche, einen Spaltenvektor in meiner for-Schleife zu haben. Es geht als eine Spalte in, sondern geht als Reihe und das verursacht Probleme in der Schleife, weil ich den FehlerZeile zu Spalte in for Schleife

ValueError: could not broadcast input array from shape (2,2) into shape (2,)

Bitte helfen bekommen. Hier, wie es geht:

Ich habe einen XTRUE Wert, bei dem der Ausgang

Out[77]: 
array([[ 44.3161691], 
    [-10.5871559]]) 

und dann gehe ich in die Schleife:

xk_1 = Xtrue #initialization before loop 
n=103.789 #calculated under some other concept 
t=int(float(np.floor(n)))-1 #number of iterations 
for k in range(0,t,1): 
     xk_1[:,k] = A.dot(xk_1[:,k-1]) + B.dot(U) #B.dot(U) is a standard value 

die Ausgabe von B.dot(U) ist (2,1)

array([[-4.903325], 
    [-9.80665 ]]) 

A=array([[1, 1], 
    [0, 1]]) 

Hier kommt was aus A.dot(xk_1[:,k-1]) mit einer Form (2,):

array([ 35.15803805, -9.87264348]) 

wo er die Form (2,1)

Ein wichtiger Punkt hier haben soll, ist, dass ich den k-ten Wert der Multiplikation brauchen, wenn es (2,k) ist, weil das ist, wie ganze System funktioniert.

Antwort

0

xk_1[:,k-1] wäre von Form (2,), deshalb A.dot(xk_1[:,k-1]) ist auch (2,). Und das Hinzufügen eines zu einem (2,1) führt zu einem (2,2), daher der Fehler.

Sie können immer einen Zeilenvektor (k,) zu Spaltenvektor ändern (k,1) mit:

my_array.shape = -1,1 # inplace 

oder

my_array.reshape((-1,1)) # returns a new array 

(die -1 steht für automatische Erkennung der Maßgröße, in Ihrem Fall, es entspricht 2.)

+0

Hallo Vielen Dank für Ihre Antwort. Ich habe vergessen zu erwähnen, dass ich versuche, selbst Python zu lernen, und ich bin erst einen Monat alt. Es tut mir leid, aber ich habe nicht verstanden, wie Sie das anwenden können, was Sie an meine Codes geschrieben haben. Ich entschied mich jedoch, B.dot (U) zu transponieren (zB xk_1 [:, k] = A.dot (xk_1 [:, k-1]) + (B.dot (U)) die Zeilen und Spalten am Ende. Aber jetzt erhalte ich einen weiteren Fehler, der sagt 'IndexError: Index 1 ist außerhalb der Grenzen für Achse 1 mit Größe 1' und jetzt kann ich nicht herausfinden, warum dies herauskommt. Ich wäre wirklich glücklich, wenn du mir wieder antworten könntest. Vielen Dank – Buket

+0

Hallo Wieder, ich wollte nur Sie informieren, dass ich den Code wie korrigiert: xk_1 = Xtrue.T t = int (float (np.floor (n))) für k im Bereich (1, t, Dt): xk_1 [k ,:] = A.dot (xk_1 [k-1 ,:]) + (B.dot (U)). T wobei Xtrue.T alles in Zeilenmatrix umwandelt. Ich habe die Schleife von 1 gestartet (wegen k-1) und die Indizierung von [:, k] auf [k ,:] geändert (da es jetzt eine Zeilenmatrix ist), aber jetzt erhalte ich den Fehler 'IndexError: Index 1 ist out Grenzen für Achse 0 mit Größe 1 'Ich verstehe nicht, um welche Achse es geht und warum mein Index falsch ist. Es sieht für mich richtig aus, aber ich hoffe, es gibt eine einfache Antwort darauf. Danke nochmal. – Buket

+0

Nun, dies ist keine Tutorial-Website. Es gibt bereits Tonnen von Informationen, die nur zu lernen sind. Ich schlage vor, Sie beginnen, die Dokumente zu lesen ... – Julien