Matrizen zusammensetzen

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
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

Hi!

Ich würde gerne eine 12x12-Matrix aus 16 3x3-Matrizen zusammensetzen.
Im speziellen Fall soll diese 12x12-Matrix A aus lauter Nullen bestehen und auf ihrer Diagonalen die 3x3-Matrizen B stehen haben.

Mein erster Versuch war folgender:

Code: Alles auswählen

O=zeros((3,3))
A=mat('[B O O O; O B O O; O O B O; O O O B]')
Das führte zu einer Fehlermeldung.

Der zweite Versuch bestand aus vstack und hstack:

Code: Alles auswählen

A=vstack((hstack((B, O, O, O)),hstack((O, B, O, O)),hstack((O, O, B, O)),hstack((O, O, O, B)))
Wenn ich das ausführe, rechnet der PC, jedoch kommt kein Ergebnis raus.

Nachdem ich nun eine halbe Ewigkeit Foren durchsucht habe und nicht fündig geworden bin, versuch ich hier mein Glück.
Danke im Voraus!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,

magst Du uns verraten, was Du genau machen willst und importiert hast? numpy, Numeric, etwas Anderes?
sponk hat geschrieben: Mein erster Versuch war folgender:

Code: Alles auswählen

O=zeros((3,3))
A=mat('[B O O O; O B O O; O O B O; O O O B]')
Das führte zu einer Fehlermeldung.
Was für eine? Bei Forenfragen, am besten immer angeben, was es für Fehlermeldungen gibt, auch wenn es offensichtlich scheint. Gerade, wenn man kaum Code zeigt, kann es so dazu kommen, das man auf die richtige Spur gefürt wird.

Was genau ist hier B? Das ist doch gar nicht definiert? Was übergibst Du da für einen seltsamen String an mat?

Wenn Du zufälligerweise numpy nutzt, dann lies doch mal das Numerictutorial durch. Da stehen solche Dinge drin. (Habe leider gerade keinen Rechner mit Python zur Verfügung - kann jemand anderer ein Beispiel geben?)

Gruß,
Christian
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

Danke für die schnelle Antwort!

Da ich momentan noch keinen Code zusammengeschrieben habe, sondern mich gerade nur in der Konsole probiere, hatte ich auch keine Code zur Hand. Aber dann schreib ich hier mal alles Wesentliche zusammen.

Code: Alles auswählen

from numpy import *
from scipy import *
B=eye((3))
O=zeros((3,3))
A=mat('[B O O O; O B O O; O O B O; O O O B]')
# dann kommt folgende Fehlermeldung:
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib64/python2.4/site-packages/numpy/core/defmatrix.py", line 47, in asmatrix
    return matrix(data, dtype=dtype, copy=False)
  File "/usr/lib64/python2.4/site-packages/numpy/core/defmatrix.py", line 74, in __new__
    data = _convert_from_string(data)
  File "/usr/lib64/python2.4/site-packages/numpy/core/defmatrix.py", line 33, in _convert_from_string
    newrow.extend(map(_eval,temp))
  File "/usr/lib64/python2.4/site-packages/numpy/core/defmatrix.py", line 22, in _eval
    return eval(astr.translate(_table,_todelete))
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing
Die Matrix B ist nur in diesem speziellen Fall die Einheitsmatrix, daher wird es nichts mit

Code: Alles auswählen

A=eye((12))
;)

edit:
Habe es gerade auch mit

Code: Alles auswählen

A=matrix([[B,O,O,O],[O,B,O,O][O,O,B,O][O,O,O,B]])
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: list indices must be integers
probiert. Das will aber auch nicht :(
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dein Stichwort heisst bmat (fuer block matrix), wenn ich mich recht erinnere. Allerdings habe ich gerade ein Problem mit der scipy-Seite, sodass ich es nicht nachsehen kann.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

Kleiner Test:

Code: Alles auswählen

from numpy import hstack, ones, vstack, zeros

def main():
    n = 4
    m = 3
    B = ones((m, m), dtype=int)
    O = zeros((m, m), dtype=int)
    A = vstack(hstack((B if x == y else O) for x in xrange(4))
               for y in xrange(4))
    print A
Ausgabe:

Code: Alles auswählen

[[1 1 1 0 0 0 0 0 0 0 0 0]
 [1 1 1 0 0 0 0 0 0 0 0 0]
 [1 1 1 0 0 0 0 0 0 0 0 0]
 [0 0 0 1 1 1 0 0 0 0 0 0]
 [0 0 0 1 1 1 0 0 0 0 0 0]
 [0 0 0 1 1 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 1 1 1 0 0 0]
 [0 0 0 0 0 0 1 1 1 0 0 0]
 [0 0 0 0 0 0 1 1 1 0 0 0]
 [0 0 0 0 0 0 0 0 0 1 1 1]
 [0 0 0 0 0 0 0 0 0 1 1 1]
 [0 0 0 0 0 0 0 0 0 1 1 1]]
Soll das Ergebnis so aussehen!?
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

Rebecca hat geschrieben:Dein Stichwort heisst bmat (fuer block matrix), wenn ich mich recht erinnere. Allerdings habe ich gerade ein Problem mit der scipy-Seite, sodass ich es nicht nachsehen kann.
Danke! Werde ich morgen probieren und antworten ob es mich weitergebracht hat ;)
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

BlackJack hat geschrieben:Soll das Ergebnis so aussehen!?
Bist auf die B-Matrix stimmt's glaub ich. Danke und bis morgen ;)
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

@Rebecca: Danke! Es tut :)

@BlackJack: bei mir kommt beim Erstellen der A-Matrix diese Fehlermeldung:
SyntaxError: invalid syntax :(
Nichtsdestotrotz vielen Dank! Werde es erstmal mit Rebeccas Variante weiterprobieren...
BlackJack

Dann solltest Du bei Gelegenheit auf Python 2.5.x aufrüsten. :-)
sponk
User
Beiträge: 10
Registriert: Montag 12. November 2007, 13:28

BlackJack hat geschrieben:Dann solltest Du bei Gelegenheit auf Python 2.5.x aufrüsten. :-)
werd ich dem system-admin hier bei zeiten mal vorschlagen ;)
Antworten