Matrix wird elementweise gelesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Hallo, ich gebe eine Matrix in einer Methode zurück:

Code: Alles auswählen

def init_vector(matrix):
  a_matrix= zeros(matrix.shape[0], matrix.shape[1])
  #a_matrix=np.matrix([a]).astype(float)
  #b_matrix=zeros(matrix.shape[0], matrix.shape[1])
  for i in range(matrix.shape[0]):
    for j in range(matrix.shape[1]):
      a_matrix[i,j]=randint(-10,10)
      #b_matrix[i,j]=randint(-10,10)
  w=widgets.Textarea(
               description='Multwert', 
               value = str(a_matrix),
          )
  display(w)
  return a_matrix

Dann habe ich eine Liste x=[]
Diese Matrix wird in die Liste gelesen.

Code: Alles auswählen

if len(i_progr.init_vector(m_1)) > 1:
                 x.extend(i_progr.init_vector(m_1))
                 w=widgets.Textarea(
                     description='typinfo', 
                     value = str(type(x[0])),
                 )
                 display(w)
           else: 
                 x.append(i_progr.init_vector(m_1))
                 w=widgets.Textarea(
                     description='typinfo', 
                     value = str(type(x[0])),
                 )
                 display(w)
Jetzt ist es so, dass x[0] nicht die übergebene Matrix ist, sondern das erste Matrixelement. Entsprechend werden x[1] bis x[3] besetzt. Ich hätte es aber gerne, wenn die gesamte Matrix in x[0] stünde.
Wenn ich zwei Matrizen zurückgebe erhalte ich das richtige Ergebnis:
x[0]= matrix1
x[1]= matrix2
Zuletzt geändert von Anonymous am Mittwoch 22. Juni 2016, 09:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: wenn Du das Verhalten nicht willst, solltest Du auch die richtigen Methoden für Listen verwenden. Dazu wurdest Du schon mehrfach auf das Tutorial verwiesen. Dass Dein init_vector ein Einzeiler ist, hatte ich Dir auch schon öfter geschrieben:

Code: Alles auswählen

def init_vector(matrix):
    return numpy.random.randint(-10,10, size=matrix.shape)
BlackJack

@Brando: Nachdem Du dann irgendwann einmal die Python-Grundlagen gelernt hast, würde ich als nächstes die Numpy-Grundlagen empfehlen. Auch dort gibt es in der Dokumentation ein Tutorial. Ein Numpy-Array mit Zufallszahlen erstellt man nämlich normalerweise nicht mit Schleifen die in Python geschrieben sind und `randint()` aus dem `random`-Modul.

Die Einrückung sollte übrigens immer noch vier Leerzeichen pro Ebene betragen. Nicht zwei, nicht fünf, und auch nicht 17. :roll:

Zum Problem: Na du musst halt die Daten immer in einer äquivalenten Struktur zurückliefern wenn Du sie immer gleich behandeln willst. Also nicht mal einen Einzelwert und mal einen Containertyp mit mehreren Werten. Wenn immer ein Containertyp erwartet wird, muss man halt auch Einzelwerte in einen Container stecken. (Ich bezeichne das Numpy-Array in diesem Kontext jetzt mal grosszügig als Einzelwert :-))
Antworten