Seite 1 von 1

Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Dienstag 9. August 2011, 21:22
von paracide
Hi zusammen,

Ich bin neu hier und wusste deshalb nicht wo die frage wirklich hin gehört.
Aus diesem Grund im Vorfeld ein Sorry...

Nun zu meinem Problem.
Ich möchte automatisch eine Matrix (x,3) erstellen.

für den Fall das ich folgende Matrix erstellen möchte:

['1' '1' '1']
['1' '1' '2']
['1' '1' '3']
['1' '1' '4']
['1' '1' '5']
['1' '2' '1']
['1' '2' '2']
['1' '2' '3']
['1' '2' '4']
['1' '2' '5']


habe ich folgenden code:


Code: Alles auswählen

import numpy

x = 3
y = 6

Basis = str(1)
Zeile0 = numpy.array(())

for a in range(1,x):
    for i in range(1,y):
        Zeile1 = numpy.array([Basis,a,i])
        Matrix1 = numpy.concatenate((Zeile0,Zeile1))
        print (Matrix1)

Mir ist klar das ich jede Zeile der Matrix nach einander erstelle und ausgebe.
Jedoch möchte ich in der Variable Matrix1 die gesamte Matrix für Berechnungen weiter verwenden.
Wie zu sehen ist habe ich schon versucht die Zeilen aneinander zu fügen um im nachhinein über den Befehl shape die Matrix umzuformen.
Jedoch ohne erfolg

Hat einer eine Idee die mir weiterhilft, so dass ich die gewünschte Matrix automatisch generieren kann???


Danke

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Dienstag 9. August 2011, 21:34
von Darii
Du darfst einfach dein Zwischenergebnis nicht immer wieder überschreiben…

Code: Alles auswählen

Matrix1 = Zeile0
for a in ...:
    for i in ...:
        Zeile1 = ...
        Matrix1 = numpy.concatenate((Matrix1,Zeile1))
print Matrix1
numpy.hstack bzw. numpy.vstack helfen dir vermutlich ein reshape zu vermeiden.

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Mittwoch 10. August 2011, 00:06
von BlackJack
@paracide: Gibt es einen bestimmten Grund warum das ein `numpy.array` sein soll? Also man kann da auch Zeichenketten drin speichern, aber die sind eigentlich eher für Zahlen gedacht. Bei den gezeigten Werten für `x` und `y` ist das vielleicht nicht so wichtig, aber ein Array über wiederholtes Konkatenieren oder „Stapeln” aufzubauen, ist nicht besonders effizient. Während zum Beispiel `list` dafür ausgelegt ist dynamisch durch neue Elemente erweitert zu werden.

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Mittwoch 10. August 2011, 05:32
von paracide
@ BlackJack

ich muss anschließend mit der Matrix rechnen und in numpy ist es so wie ich gelesen habe wesentlich einfacher.
Dort kann ich direkt Kreuzprodukt / Vektorprodukt etc ausgeben...

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Mittwoch 10. August 2011, 06:17
von karolus
Hallo

Code: Alles auswählen

s = [[1, b, c] for b in range(1,3) for c in range(1,6)]
a = numpy.array(s)
Karo

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Mittwoch 10. August 2011, 07:18
von paracide
Ihr seid die besten!
Wie schnell das geht, danke an alle die mir so schnell geholfen haben!!!

Re: Probleme mit dem erstellen einer automatischen Matrix

Verfasst: Mittwoch 10. August 2011, 07:22
von CM
@paracide: Was BJ meint ist, daß "rechnen" mit Buchstaben / Strings schlecht funktioniert. Du zeigst nämlich Buchstaben (z. B. '1') und wandelst auch in Strings um (mit str() ), was aber so ganz wie Du dachtest nicht funktioniert haben wird.

Zur Berechnung von Skalarprodukten (und ggf. auch Kreuzprodukten) (numpy.dot und numpy.cross), solltest Du aber über Matrices mit anderer Form nachdenken oder transponieren. Um in karolus Beispiel zu bleiben:

Code: Alles auswählen

In [15]: np.dot(a,a)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/home/cm/<ipython console> in <module>()

ValueError: objects are not aligned

In [16]: np.cross(a,a)
Out[16]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
Aber

Code: Alles auswählen

In [17]: np.dot(a,a.T)
Out[17]: 
array([[ 3,  4,  5,  6,  7,  4,  5,  6,  7,  8],
       [ 4,  6,  8, 10, 12,  5,  7,  9, 11, 13],
       [ 5,  8, 11, 14, 17,  6,  9, 12, 15, 18],
       [ 6, 10, 14, 18, 22,  7, 11, 15, 19, 23],
       [ 7, 12, 17, 22, 27,  8, 13, 18, 23, 28],
       [ 4,  5,  6,  7,  8,  6,  7,  8,  9, 10],
       [ 5,  7,  9, 11, 13,  7,  9, 11, 13, 15],
       [ 6,  9, 12, 15, 18,  8, 11, 14, 17, 20],
       [ 7, 11, 15, 19, 23,  9, 13, 17, 21, 25],
       [ 8, 13, 18, 23, 28, 10, 15, 20, 25, 30]])
HTH
Christian