Seite 1 von 1

Matrix wird elementweise gelesen

Verfasst: Mittwoch 22. Juni 2016, 09:22
von Brando
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

Re: Matrix wird elementweise gelesen

Verfasst: Mittwoch 22. Juni 2016, 09:44
von Sirius3
@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)

Re: Matrix wird elementweise gelesen

Verfasst: Mittwoch 22. Juni 2016, 09:55
von 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 :-))